手写spring

http://blog.csdn.net/u010837612/article/details/50686573

只需要导入dom4j.jar 和jaxen-1.1.1.jar就行了

 

步骤1 根据xml路径解析xml生成对应的 一个map

 configMap.put(id, bean);

<bean id="address" class="spring_shouxie.Address">

这个id和xml中的id一致

最后生成的map可以根据id找到他的所有属性

 

步骤2  根据map中的id和bean 生成对象 利用反射生成对象并且属性注入 ioc = new HashMap<beanName, 对象>();

//根据bean的calss属性生成对象
c = Class.forName(className);

//该方法调用的是类的无参构造方法
object = c.newInstance();

//获取属性对应的setter方法
Method getMethod = BeanUtil.getSetterMethod(object,p.getName());
try {
//调用set方法注入
getMethod.invoke(object, p.getValue());

最后生成ioc容器  存放beanName和 生成对象的 关系

 ioc = new HashMap<beanName, 对象>();

 

步骤3 根据这个容易获取生成的对象

 

User user = (User) bf.getBean("user");

public Object getBean(String beanName) {
return ioc.get(beanName);
}

 

步骤1和2 都是加载xml时候完成的 BeanFactory bf = new ClassPathXmlApplicationContext("/ApplicationContext.xml");

 

总结:原先代码依赖是通过引入依赖类  现在依赖是通过java反射根据xml 可以随意修改 删除  这个列子是通过set方法注入的

通过注解注入也是类似的  就是减少了set方法  通过注解首先要扫包 根据包解析到 对应的.class文件 根据class文件生成对对象  再把对象通过反射注入到引用的地方的  没有用set或者构造函数 进行注入。

比如

@Service
public class UserService {

    @Autowired
   private UserRepository userRepository;
   
public void save(){
userRepository.save(); } }


 

posted on 2018-03-15 13:30  woymy  阅读(162)  评论(0)    收藏  举报

导航