菜鸟看spring源码(0)之BeanFactory的注册与依赖绑定
来源:互联网 发布:鸿业防排烟计算软件 编辑:程序博客网 时间:2024/05/21 12:08
先贴几个基本类:
代码清单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>
待续,,,
3 0
- 菜鸟看spring源码(0)之BeanFactory的注册与依赖绑定
- spring揭秘 读书笔记 二 BeanFactory的对象注册与依赖绑定
- (1.2)BeanFactory的对象注册与依赖绑定方式
- BeanFactory的对象注册与依赖绑定方式。(读书笔记)
- Spring源码——BeanFactory 注册bean
- Spring 源码阅读之BeanFactory
- Spring IoC源码之BeanFactory
- spring源码阅读之BeanFactory
- spring 核心与源码解析(1):IoC之BeanFactory
- 创建ApplicationContext与BeanFactory时的区别-Spring源码学习之容器的基本实现
- Spring之FactoryBean与BeanFactory
- Spring之BeanFactory 与 FactoryBean
- Spring IOC/BeanFactory/ApplicationContext的工作流程/实现原理/初始化/依赖注入源码详解
- Spring源码之旅(3)_BeanDefinition的解析与注册
- spring源码之XmlBeanDefinitionReader与bean的注册
- Spring源码阅读之-bean的解析与注册
- Spring 源码梳理(五) FactoryBean与BeanFactory
- spring源码阅读(四)之BeanFactory
- 将数值四舍五入后格式化,带有千分位
- s3c2440看门狗定时器
- NSJSONSerialization介绍
- 谷歌眼镜甩掉“科技范儿”,改走“时尚”路线
- 在Laravel中使用自己的类库三种方式
- 菜鸟看spring源码(0)之BeanFactory的注册与依赖绑定
- 数据结构与算法——图
- Alex 的 Hadoop 菜鸟教程: 第7课 Hbase 使用教程
- 创建数据库、表、架构以及约束
- Search a 2D Matrix 二分查找变形
- C#后台动态生成CheckBoxList
- 新手学习:根据生日计算当前年龄
- EditText 单击无法弹出软键盘
- Spring注解@Component、@Repository、@Service、@Controller区别