spring di(即依赖注入)的原理个人理解是这样子的,先读取配置文件,在通过解析xml将有用的信息扣取出来,再通过反射机制来实现类或方法的实例化。
今天我模拟了两种注入方式一种是注入bean,另一种是注入一个factory.对于工厂模式本人觉得还蛮好用的,只要搭建起了架构感觉管理起来挺容易的。还有bridge模式在开发中也是很便于管理的。所以我在这个小例子里面结合了bridge和factory模式。
下面是代码:
1,UserDao:接口
public interface UserDao {
public boolean add();
}
2,ImplUserDaoMySql:实现UserDao接口的MySql数据库dao层
public class ImplUserDaoMySql implements UserDao {
@Override
public boolean add() {
System.out.println("add MySql Dao!");
return true;
}
}
3,ImplUserDaoOracle:实现UserDao接口的Oracle数据库dao层
public class ImplUserDaoOracle implements UserDao {
@Override
public boolean add() {
System.out.println("add Oracle Dao!");
return true;
}
}
上面两个就可以体现出桥模式的优点
4,DaoFactory:工厂模式类用于生产各种UserDao
public class DaoFactory {
public static UserDao getUserDaoOracle(){
return new ImplUserDaoOracle();
}
public static UserDao getUserDaoMySql(){
return new ImplUserDaoMySql();
}
}
5,AnalogApplicationContext:模拟di主程序
public class AnalogApplicationContext {
private Map<String, Object> map = new HashMap<String, Object>();
public AnalogApplicationContext(String configLocation) {
// 解析配置文件,将信息放入map中
SAXReader sax = new SAXReader();
try {
Document document = sax.read(AnalogApplicationContext.class
.getResourceAsStream(configLocation));
Element root = document.getRootElement();
List<Element> elements = root.elements();
for (int i = 0; i < elements.size(); i++) {
Element element = elements.get(i);
String idDI = element.attribute("id").getData().toString();
String classDI = element.attribute("class").getData()
.toString();
String factoryMethodDI = "";
if (element.attribute("factory-method") == null) {
map.put(idDI, Class.forName(classDI).newInstance());
} else {
factoryMethodDI = element.attribute("factory-method")
.getData().toString();
Object obj = Class.forName(classDI).newInstance()
.getClass().getDeclaredMethod(factoryMethodDI)
.invoke(Class.forName(classDI).newInstance());
map.put(idDI, obj);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public Object getBean(String id) {
return map.get(id);
}
}
6,applicationContext-di.xml:spring模拟配置文件,注意本模拟程序中applicationContext-di.xml必须和AnalogApplicationContext.java主模拟程序放在同一目录下,应为我获取applicationContext-di.xml文件路径是先通过AnalogApplicationContext.java来获取,当然这个也是可变的,自由发挥喽。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
<bean id="userDaoOracle" class="com.fairy.spring.di.impldao.ImplUserDaoOracle" />
<bean id="userDaoMySql" class="com.fairy.spring.di.daofactory.DaoFactory" factory-method="getUserDaoMySql" />
</beans>
7,TestDI:测试类,用来测试两种注入方式
public class TestDI {
/**
* @测试模拟spring DI程序
*/
public static void main(String[] args) {
/**
* 测试bean注入模式
*/
AnalogApplicationContext alAcOracle = new AnalogApplicationContext("applicationContext-di.xml");
UserDao userdaoOracle = (UserDao)alAcOracle.getBean("userDaoOracle");
userdaoOracle.add();
/**
* 测试factory注入模式
*/
AnalogApplicationContext alAcMySql = new AnalogApplicationContext("applicationContext-di.xml");
UserDao userdaoMySql = (UserDao)alAcMySql.getBean("userDaoMySql");
userdaoMySql.add();
}
}
分享到:
相关推荐
标题中的“Spring简单模拟Spring容器”意味着我们将探讨Spring框架的核心特性——IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入),以及如何通过编程方式模拟Spring容器的工作原理。...
在本文中,我们将探讨如何通过Java来模拟Spring框架的基本功能。Spring是一个广泛应用的开源框架,它主要为Java应用程序提供依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP...
通过以上步骤,我们可以实现一个简单的Java模拟Spring IOC的系统。这种方式可以帮助开发者更好地理解Spring的工作原理,并在没有Spring框架的环境中实现相同的功能。不过,需要注意的是,Spring框架提供了更高级的...
通过以上步骤,我们可以构建一个简单的IOC容器,模拟Spring的核心功能。这不仅有助于理解Spring的工作原理,也为我们自定义轻量级框架提供了可能。在实际开发中,了解并掌握Spring的IOC机制能够帮助我们更好地设计和...
【标题】:“自己动手模拟spring” 【描述】:在该主题中,我们将深入理解Spring框架的核心概念,并通过编码实践来模拟其工作原理。参考链接提供了一个CSDN博客文章,作者详细介绍了如何从零开始创建一个简易版的...
本文将通过模拟Spring的`BeanFactory`来深入理解其工作原理,帮助开发者更好地掌握Spring的核心概念。 `BeanFactory`是Spring框架中最基础的bean管理容器,它是所有更高级别的容器(如`ApplicationContext`)的基类...
《模拟Spring:深入理解与实践》 在软件开发领域,Spring框架无疑是最为广泛使用的Java企业级应用框架之一。它以其强大的依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)...
在这个模拟Spring IoC的项目中,我们可以深入理解以下几个关键知识点: 1. **容器的概念**:Spring IoC容器是管理对象及其依赖关系的核心组件。在这个模拟项目中,会有一个类或接口扮演容器的角色,负责创建对象、...
本资源名为“模拟spring和工具jar包”,其目的是为了帮助我们理解Spring框架的核心概念——依赖注入,并通过一个简化版的实现来学习这一机制。 依赖注入是Spring框架的核心特性之一,它允许我们在不直接创建对象的...
"模拟Spring架构的简易实现"这个项目可能是为了理解和学习Spring框架的基本原理而创建的,它可能通过简单的代码来模拟Spring的一些核心功能。 首先,我们要理解Spring的核心概念。依赖注入是Spring最基础的设计模式...
模拟Spring的IOC功能,我们可以创建一个简单的解析器类,该类负责加载XML配置文件,解析Bean定义,实例化和注入依赖。为了实现这个功能,我们需要了解和使用Java的DOM或SAX解析库,以及反射API。这是一个很好的学习...
模拟Spring的依赖注入,我们可以创建一个简单的容器类,它使用反射来扫描带有特定注解的类,并根据这些注解管理bean。以下步骤概括了这个过程: 1. **定义注解**:创建自定义注解,如`@MyComponent`,用于标记需要...
总的来说,《尚学堂_Spring_0100_模拟Spring》的学习资源将涵盖Spring的基本概念、核心组件、DI和AOP的应用,以及相关的开发工具使用。通过深入学习和实践,我们将能够熟练掌握Spring框架,并能有效地应用于实际项目...
在`YQIoc`这个压缩包中,可能包含了实现简单模拟Spring IoC容器的代码。通常,这个模拟会包含以下几个部分: 1. **Bean定义**:这是描述对象如何创建和配置的数据结构。在我们的例子中,bean定义可能是以XML形式...
本篇文章将深入探讨如何通过Java代码来模拟Spring的依赖注入机制。 **依赖注入的概念** 依赖注入是一种设计模式,它允许对象在运行时获取其依赖项,而不是在构造函数或初始化方法中硬编码这些依赖项。这样做的好处...
在这个项目中,“基于java简单模拟实现spring_ioc”显然是为了帮助开发者理解Spring的IoC容器是如何工作的,以及如何通过Java代码来模拟这个过程。 首先,让我们了解什么是Spring的IoC。IoC是一种设计模式,它将...
现在,我们将深入探讨如何通过自己的代码来模拟Spring的依赖注入。 首先,理解依赖注入的概念至关重要。依赖注入意味着组件不直接创建其依赖的对象,而是由外部实体(如Spring IoC容器)提供。这样做的好处是,我们...
这个例子展示了如何模拟Spring的IOC和DI。虽然实际的Spring框架提供了更强大和复杂的功能,如自动扫描、AOP(面向切面编程)、事务管理等,但这个简单的模拟可以帮助我们理解核心理念。通过这个小Demo,你应该能更好...
模拟Spring并不是重新创建一个完整的Spring框架,而是为了学习和理解Spring的工作原理,通过编写简单的代码来实现IOC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)的核心...
模拟Spring的依赖注入,旨在理解其核心机制,让我们一起深入探讨这一主题。 首先,我们要明白什么是依赖注入。在传统的编程中,一个对象通常会直接创建或查找它所依赖的对象,这会导致类之间的紧密耦合。依赖注入则...