Spring IOC BeanFactory简单介绍
来源:互联网 发布:中国税务网络大学入口 编辑:程序博客网 时间:2024/05/23 15:19
Spring提供了两种容器类型:BeanFactory和ApplicationContext
BeanFactory:BeanFactory是基础类型的IoC容器,提供完整的IoC服务支持.如果没有特殊指定,默认采用延迟初始化策略(lazy-load).也就是说bean只有在真正使用的情况下才会被初始化以及依赖注入操作,所以Bean初期启动速度较快,在对于资源有限,并且功能要求不严格的场景,BeanFactory是合适的选择
ApplicationContext:ApplicationContext在BeanFactory的基础上构建,是相对高级的容器实现,除了拥有BeanFactory的功能外,ApplicationContext还提供了更高级的特性.ApplicationContext和BeanFactory不同之处还在于ApplicationContext在初始化容器时会完成所有bean的初始化
BeanFactory是一个接口,DefaultListableBeanFactory是一个常用的BeanFactory的实现类。DefaultListableBeanFactoryy除了间接实现BeanFactory接口,还实现了BeanDefinitionRegistry接口,该接口在BeanFactory中担当Bean注册管理的角色,而在容器中每个bean对象都有一个对应的BeanDefinition的实例与之对应。抽象类AbstractBeanDefinition是BeanDefinition接口的一个实现,而AbstractBeanDefinition有三个子类,一个是RootBeanDefinition一个是ChildBeanDefinition另一个是GenericBeanDefinition,这三个子类有什么不同呢
下面这个例子演示了使用BeanFactory作为IoC容器
public static void main(String[] args) { //首先初始化registry在IOC容器中用于真正的bean管理 DefaultListableBeanFactory beanRegistry = new DefaultListableBeanFactory(); //通过bindViaCode得到 BeanFactory container = (BeanFactory) bindViaCode(beanRegistry); Student student= (Student) container.getBean("student"); System.out.println(student.toString()); } public static BeanFactory bindViaCode(BeanDefinitionRegistry registry) { //AbstractBeanDefinition是bean的对应实例 AbstractBeanDefinition student = new RootBeanDefinition(Student.class, 2, true); AbstractBeanDefinition people = new RootBeanDefinition(People.class, 2, true); registry.registerBeanDefinition("student", student); registry.registerBeanDefinition("people", people); //people初始化需要的构造函数参数 ConstructorArgumentValues args = new ConstructorArgumentValues(); args.addIndexedArgumentValue(0, "fristname"); args.addIndexedArgumentValue(1, "lastname"); people.setConstructorArgumentValues(args); //设置student的age属性 MutablePropertyValues propertyValues = new MutablePropertyValues(); propertyValues.addPropertyValue("age", 20); student.setPropertyValues(propertyValues); return (BeanFactory) registry; }
上面这段代码首先初始化Registry是IoC容器中bean真正的管理者,而new RootBeanDefinition(Student.class, 2, true);是bean对应的实例,如果构造器需要传参可以使用ConstructorArgumentValues对象,而对于属性可以使用MutablePropertyValues进行初始化
使用注解的方式
在spring.xml中加入如下配置
<context:component-scan base-package="com.spring.ioc.factory"/>
在Student的类上加上component注释
@Componentpublic class Student { private int age; @Autowired private Computer computer;
用spring.xml配置文件
案例
public static void main(String[] args) { DefaultListableBeanFactory beanRegistry=new DefaultListableBeanFactory(); BeanFactory container=bindViaXMLFile(beanRegistry); Teacher teacher= (Teacher) container.getBean("teacher"); teacher.showMe(); } public static BeanFactory bindViaXMLFile(BeanDefinitionRegistry registry){ XmlBeanDefinitionReader reader=new XmlBeanDefinitionReader(registry); reader.loadBeanDefinitions("classpath:spring.xml"); return (BeanFactory)registry; }
main函数
public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); Student student = context.getBean(Student.class); System.out.println(student);}
- Spring IOC BeanFactory简单介绍
- Spring IOC BeanFactory(译)
- Spring IoC源码之BeanFactory
- Spring--IoC--创建BeanFactory容器
- spring IOC BeanFactory和ApplicationContext
- spring BeanFactory 家族介绍
- IOC介绍及其简单实现,Struts+Spring
- Spring IOC 学习笔记(二) BeanFactory
- Spring IOC-BeanFactory的继承体系结构
- Spring--IoC--application与BeanFactory容器比较
- Spring IOC源码 个人初探(一) BeanFactory
- Spring源码分析IOC实现一BeanFactory
- 一步一步学习Spring(2)-Spring IOC 之BeanFactory
- spring基础学习之Ioc-反射简单介绍(四)
- (1.0)Spring的IoC容器之BeanFactory
- 浅析Spring IoC源码(二)BeanFactory初始化
- Spring揭秘:第一章-第六章IOC与BeanFactory
- spring深入发掘-IOC容器解读系列-BeanFactory
- 1075. 链表元素分类(25) PAT乙级真题
- pygame库写游戏——入门<4>——字体
- 机器学习总结(一)——有监督和无监督、生成模型和判别模型
- Java设计模式——装饰器模式、适配器模式、外观模式
- 对数函数的C、MATLAB表示
- Spring IOC BeanFactory简单介绍
- unity实现触摸摇杆的个人实践体会
- Android Studio 2.3利用CMAKE进行OpenCV 3.2的NDK开发
- JSP学习1-概述
- hdoj-2492Ping pong(树状数组)
- Java注解笔记
- Android camera2
- SQL的inner join、left join、right join、full join、union、union all的区别
- Java作业_Day21_