Spring IOC容器Bean对象实例化的三种方式
Spring IOC容器Bean对象实例化
构造器实例化
通过默认构造器创建 空构造?法必须存在 否则创建失败
第一步:设置配置?件 spring02.xml
配置文件名字自己取,但是后缀一定是xml
<bean id="唯一标识" class="类路径">
</bean>
<?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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!--
构造器实例化
对应Bean对象需要提供空构造
-->
<bean id="typeDao" class="com.svt.dao.TypeDao"></bean>
</beans>
第二步:编写构造器
完善在配置文件内写的class="com.svt.dao.TypeDao"
在com.svt下新建一个dao包,在包内新建一个TypeDao类,在类中写一个测试方法
public void test(){
System.out.println("TypeDao test...");
}
注意:在这个类中写了一个测试方法默认调用无参构造,如果使用了带参构造器,就一定要显示化地写无参构造,不写会出现无法初始化的错误
Failed to instantiate [com.svt.dao.TypeDao]: No default constructor found; nested exception is java.lang.NoSuchMethodException: com.svt.dao.TypeDao.<init>()
第三步:获取实例化对象
在主方法内编写
//加载配置文件
//ApplicationContext extends ListableBeanFactory extends BeanFactory 所以可以直接写以下加载配置文件的语句
BeanFactory factory=new ClassPathXmlApplicationContext("spring02.xml");
//1. 构造器实例化
TypeDao typeDao= (TypeDao) factory.getBean("typeDao");
typeDao.test();
结果
静态工厂实例化 (了解)
1.定义工厂类StaticFactory及对应的静态方法createService
2.配置bean对象对应的工厂类及静态方法(找工厂中写的方法)
id:需要被实例化的bean对象的id
class:静态工厂类的路径
factory-method:静态工厂类中实例化bean对象的静态方法
第一步:定义工厂类StaticFactory
在com.svt下新建一个factory包,在包内新建一个StaticFactory 类,定义对应的静态?法,返回实例化对象
package com.svt.factory;
import com.svt.service.TypeService;
/**
* 定义静态工厂类
*/
public class StaticFactory {
public static TypeService createService(){
return new TypeService();
}
}
第二步:设置配置?件 spring02.xml
<bean id="唯一标识" class="静态工厂类的类路径" factory-method="静态工厂类中的静态方法">
</bean>
<?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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!--
静态工厂实例化
1.定义工厂类StaticFactory及对应的静态方法createService
2.配置bean对象对应的工厂类及静态方法(找工厂中写的方法)
id:需要被实例化的bean对象的id
class:静态工厂类的路径
factory-method:静态工厂类中实例化bean对象的静态方法
-->
<bean id="typeService" class="com.svt.factory.StaticFactory" factory-method="createService"></bean>
</beans>
第三步:创建service
在com.svt下新建一个service包,在包内新建一个TypeService类,在类中写一个测试方法
package com.svt.service;
public class TypeService {
public void test(){
System.out.println("TypeService test...");
}
}
第四步:获取实例化对象
//ApplicationContext extends ListableBeanFactory extends BeanFactory 所以可以直接写以下加载配置文件的语句
BeanFactory factory=new ClassPathXmlApplicationContext("spring02.xml");
//2.静态工厂实例化 (了解)
TypeService typeService= (TypeService) factory.getBean("typeService");
typeService.test();
当我们指定Spring使?静态???法来创建Bean实例时,Spring将先解析配置?件,并根据配置
?件指定的信息,通过反射调?静态??类的静态???法,并将该静态???法的返回值作为
Bean实例,在这个过程中,Spring不再负责创建Bean实例,Bean实例是由?户提供的静态???
法提供的。
实例工厂实例化(了解)
1.定义工厂类InstanceFactory及对应的非静态方法createTypeController
2.配置工厂对象instanceFactory
3.配置bean对象对应的工厂对象instanceFactory及工厂方法createTypeController
factory-bean:工厂对象对应的id属性值
第一步:定义工厂类InstanceFactory
package com.svt.factory;
import com.svt.controller.TypeController;
/**
* 定义实例化工厂
*/
public class InstanceFactory {
/**
* 定义方法,返回实例化对象
* @return
*/
public TypeController createTypeController(){
return new TypeController();
}
}
第二步:设置配置?件 spring02.xml
<bean id="工厂类的唯一标识" class="工厂类的类路径"></bean>
<bean id="Bean对象的唯一标识" factory-bean="工厂类的唯一标识" factory-method="工厂类中的方法"></bean>
<?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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!--
实例化工厂实例化
1.定义工厂类InstanceFactory及对应的非静态方法createTypeController
2.配置工厂对象instanceFactory
3.配置bean对象对应的工厂对象instanceFactory及工厂方法createTypeController
factory-bean:工厂对象对应的id属性值
-->
<!-- 工厂对象-->
<bean id="instanceFactory" class="com.svt.factory.InstanceFactory"></bean>
<!-- bean对象-->
<bean id="typeController" factory-bean="instanceFactory" factory-method="createTypeController"></bean>
</beans>
第三步:完善bean对象
在com.svt下新建一个controller包,在包内新建一个TypeController 类,在类中写一个测试方法
package com.svt.controller;
public class TypeController {
public void test(){
System.out.println("TypeController test...");
}
}
第四步:获取实例化对象
//3.实例化工厂实例化 (了解)
TypeController typeController= (TypeController) factory.getBean("typeController");
typeController.test();
Spring三种实例化Bean的?式?较
- ?式?:通过bean的缺省构造函数创建,当各个bean的业务逻辑相互?较独?的时候或者和外界
关联较少的时候可以使?。 - ?式?:利?静态factory?法创建,可以统?管理各个bean的创建,如各个bean在创建之前需要
相同的初始化处理,则可?这个factory?法险进?统?的处理等等。 - ?式三:利?实例化factory?法创建,即将factory?法也作为了业务bean来控制,1可?于集成其
他框架的bean创建管理?法,2能够使bean和factory的??互换。
开发中项??般使??种?式实例化bean,项?开发基本采?第?种?式,交给Spring托管,使?时直接拿来使?即可。另外两种了解
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!