Spring实例化Bean对象的三种方式
构造函数,静态工厂类,实例工厂类实例化

1.构造函数

使用构造函数方法创建bean时,所有普通类都是可用的。也就是说,正在开发的类不需要实现任何特定的接口。是最常见也是最简单的一种实例化bean的方式。

2.静态工厂类

用于生成实例对象,所有的方法必须是static。定义使用静态工厂方法创建的bean时,使用class属性指定包含要指定的静态工厂方法和名为
factory-method的属性的类工厂方法本身的名称。 相对第一种实现方式,多了工厂类;

applicationContext.xml 配置文件
<!--通过静态工厂方法实例化bean--> <bean id="instanceByStaticFactory" class="
com.abin.spring.demo.demoService.DemoStaticFactory" factory-method="
getBeanByStaticFactory"/>
InstanceByStaticFactoryImpl 需要被实例化的类
public class InstanceByStaticFactoryImpl implements InstanceByStaticFactoryI{
@Override public void printByStaticFactory() { System.out.println(
"===InstanceByStaticFactoryImpl==="); } }
DemoStaticFactory 静态工厂类
public class DemoStaticFactory { // 通过静态工厂类来实例化对象 private static
InstanceByStaticFactoryI instanceByStaticFactory = new
InstanceByStaticFactoryImpl(); public static InstanceByStaticFactoryI
getBeanByStaticFactory(){ return instanceByStaticFactory; } }
实例化
// spring的配置文件 String applicationContextStr = "applicationContext.xml"; //
创建ClassPathXmlApplicationContext ClassPathXmlApplicationContext
classPathXmlApplicationContext= new ClassPathXmlApplicationContext(
applicationContextStr); // 通过bean 的 id 创建类 InstanceByStaticFactoryI
instanceByStaticFactory= (InstanceByStaticFactoryI)
classPathXmlApplicationContext.getBean("instanceByStaticFactory");
instanceByStaticFactory.printByStaticFactory();
结果

=InstanceByStaticFactoryImpl=

3.实例工厂类

必须先有工厂实例对象,通过实例对象创建对象。提供所有的方法都是“非静态”的。与通过静态工厂方法实例化类似,使用实例工厂方法实例化从容器中调用

现有bean的非静态方法来创建新bean。使用这个机制,保留class属性为空,在factory-bean属性中指定a的名称包含要调用的实例方法的当前(或父/父)
容器中的bean创建对象。

applicationContext.xml 配置文件
<!--通过实例工厂实例化bean--> <!-- 因为不是静态的返回对象,所以要先获取到工厂对象,然后再通过工厂对象使用非静态成员方法--> <bean
id="instanceByInstanceFactory" class="
com.abin.spring.demo.demoService.DemoInstanceFactory"/> <!--
这里的factory-bean中的值为前面写的指向实例工厂类bean的id --> <bean id="instanceByInstanceFactorImpl
" factory-bean="instanceByInstanceFactory" factory-method="
getInstanceByInstanceFactory"/>
InstanceByInstanceFactoryImpl 被实例化的类
public class InstanceByInstanceFactoryImpl implements
InstanceByInstanceFactoryI { @Override public void printByInstanceFactory() {
System.out.println("===InstanceByInstanceFactoryImpl==="); } }
DemoInstanceFactory 实例工厂类
public class DemoInstanceFactory { // 实例工厂类 private InstanceByInstanceFactoryI
instanceByInstanceFactory= new InstanceByInstanceFactoryImpl(); public
InstanceByInstanceFactoryI getInstanceByInstanceFactory(){ return
instanceByInstanceFactory; } }
实例化
// spring的配置文件 String applicationContext = "applicationContext.xml"; //
创建ClassPathXmlApplicationContext ClassPathXmlApplicationContext cxt = new
ClassPathXmlApplicationContext(applicationContextStr); // 通过bean 的 id 创建类
InstanceByInstanceFactoryI InstanceByInstanceFactor = (
InstanceByInstanceFactoryI) cxt.getBean("instanceByInstanceFactorImpl");
InstanceByInstanceFactor.printByInstanceFactory();
结果

=InstanceByInstanceFactoryImpl=

技术
今日推荐
阅读数 170189
阅读数 23
阅读数 5
阅读数 0
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:766591547
关注微信