首页 > 代码库 > 菜鸟看spring源码(0)之deubg环境搭建与BeanFactory的注册与依赖绑定
菜鸟看spring源码(0)之deubg环境搭建与BeanFactory的注册与依赖绑定
先贴几个基本类:
代码清单1#User类
package test; public class User{ private String name; User(){} User(String name){ this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
代码清单2#UserDao.java
package test; public class UserDao{ public void add(User user){ System.out.println("添加user:"+user.getName()); } }
代码清单3#UserService.java
package test; public class UserService{ private UserDao userDao; UserService(){ } UserService(UserDao userDao){ this.userDao = userDao; } public void add(User user){ userDao.add(user); } public UserDao getUserDao() { return userDao; } public void setUserDao(UserDao userDao) { this.userDao = userDao; }; }
下面开始测试用例
在代码中实现beanfatory的注入与依赖绑定,基本让人明白getBean方法大概是个什么过程
接口BeanDefinitionRegistry实现了DefaultListableBeanFactory接口,
DefaultListableBeanFactory实现了BeanFactory接口。
代码清单4#test.java 通过代码实现beanfatory的注入与依赖绑定
package test; import org.springframework.beans.MutablePropertyValues; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.config.ConstructorArgumentValues; import org.springframework.beans.factory.support.AbstractBeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.beans.factory.support.RootBeanDefinition; public class Test { public static void main(String[] args) { DefaultListableBeanFactory beanRegister = new DefaultListableBeanFactory(); BeanFactory beanfactory = getFactory(beanRegister); UserService userService = (UserService) beanfactory.getBean("userService"); userService.add(new User("test")); } public static BeanFactory getFactory(BeanDefinitionRegistry registry){ AbstractBeanDefinition userDao = new RootBeanDefinition(UserDao.class); AbstractBeanDefinition userService = new RootBeanDefinition(UserService.class); //将bean注册到容器中 registry.registerBeanDefinition("userDao", userDao); registry.registerBeanDefinition("userService", userService); //绑定依赖关系 //1.通过构造方法注入 ConstructorArgumentValues argValues = new ConstructorArgumentValues(); argValues.addIndexedArgumentValue(0, userDao); //argValues.addIndexedArgumentValue(1, ...); userService.setConstructorArgumentValues(argValues); //2.通过setter方法注入 MutablePropertyValues propertyValues = new MutablePropertyValues(); propertyValues.addPropertyValue("userDao", userDao); userService.setPropertyValues(propertyValues); //绑定完成 return (BeanFactory) registry; } }
通过xml配置文件实现,debug也就是从这段代码开始了,,,解析“classpath:userservice.xml”字符串,通过resource接口读取资源(在这里是classpathResouce),解析bean标签,生成对应BeanDefinition ,, ,当然需要适当取舍,不然代码太多一下根本看不完,关键是不一定看得懂
代码清单5#TestFromXML.java 通过xml配置文件
package test; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.beans.factory.xml.XmlBeanDefinitionReader; public class TestFromXMl { public static void main(String[] args) { DefaultListableBeanFactory beanRegister = new DefaultListableBeanFactory(); BeanFactory beanfactory = getFactory(beanRegister); UserService userService = (UserService) beanfactory.getBean("userService"); userService.add(new User("test")); } private static BeanFactory getFactory(DefaultListableBeanFactory beanRegister) { XmlBeanDefinitionReader xmlBeanReader = new XmlBeanDefinitionReader(beanRegister); xmlBeanReader.loadBeanDefinitions("classpath:userService.xml"); return beanRegister; } }代码清单6#userService.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="userService" class="test.UserService" > <constructor-arg index="0"> <ref bean="userDao"/> </constructor-arg> </bean> <bean id="userDao" class="test.UserDao"></bean> </beans>
待续,,,
菜鸟看spring源码(0)之deubg环境搭建与BeanFactory的注册与依赖绑定
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。