spring中的对象创建
对象的创建时机
核心容器的两个接口
-
AppicationContext:单例对象适用,可以通过内部配置的方式改变对象的创建时机(常用)
- 它在创建容器时,创建对象采取的是立即加载。在创建容器的时候,只要一读取配置文件,马上创建bean对象
ApplicationContext ac=new ClassPathXmlApplicationContext("bean.xml");//在这里创建对象 -
BeanFactory:多例对象适用
- 它在创建容器时,创建对象采取的是延迟加载。什么时候根据id获取对象了,什么时候才创建对象。
Resource resource = new ClassPathResource("bean.xml"); BeanFactory factory=new XmlBeanFactory(resource); AccountService accountService=(AccountService)factory.getBean("accountService");//在这里创建对象
bean创建的三种方式
第一种
- 适用对象:有默认无参构造函数的对象
- 原理:通过spring框架直接读取类对象,通过无参构造函数创建
- 创建方式
<bean id="xxxx" class="xx.xx.xx"></bean>
第二种
- 适用对象:jar包中的,或者没有默认无参构造函数的对象
- 原理:通过非静态的factory工厂对象创建
- 创建方式
<bean id="xxxFactory" class="xxx.xxx.xxx.xxFactory"/><!--创建工厂类的bean对象-->
<bean id="xxx" factory-bean="xxxFactory" factory-method="getxxx"/><!--通过工厂类的方法返回值创建-->
第三种
- 适用对象:jar包中的,或者没有默认无参构造函数的对象
- 原理:通过静态的factory工厂对象创建
- 创建方式
<bean id="xxx" class="xxx.xxx.xxFactory" factory-method="getxxx"/><!--通过静态工厂的方法返回值创建-->