1.使用类构造器实例化(默认无参数)
2.使用静态工厂方法实例化(简单工厂模式)
3.使用实例工厂方法实例化(工厂方法模式)
第一种
使用它的无参构造方法来实例化,如下图
Bean1的类 配置Bean1 实例化Bean1第二种
首先创建一个Bean2类
package com.jiaoshou.ioc.demo2;
/**
* 使用静态工厂方法实例化(简单工厂模式)
*/
public class Bean2 { }
然后再创建一个Bean2的静态工厂类
package com.jiaoshou.ioc.demo2;
/**
* Bean2的静态工厂
*/
public class Bean2Factory {
public static Bean2 getBean2() {
System.out.println("Bean2实例化了,并且Bean2Factory也执行了");
return new Bean2();
}
}
配置applicationContext.xml,
<bean id="bean2" class="com.jiaoshou.ioc.demo2.Bean2Factory" factory-method="getBean2">
其中的 factory-method为选择这个类的方法
class的值是静态工厂类,而不是Bean2
在方法中运行
@Test
public void demo2() {
//创建工程
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
Bean2 bean2=(Bean2) applicationContext.getBean("bean2");
}
第三种
首先创建一个Bean3类
package com.jiaoshou.ioc.demo2;
/**
* 使用实例工厂方法实例化(工厂方法模式)
*/
public class Bean3 {
}
然后再创建一个Bean3的实例工厂类
package com.jiaoshou.ioc.demo2;
/**
* Bean3的实例工厂
*/
public class Bean3Factory {
public Bean3 getBean3() {
System.out.println("Bean3实例化了,并且Bean3Factory也执行了");
return new Bean3();
}
}
配置applicationContext.xml
<bean id="bean3Factory" class="com.jiaoshou.ioc.demo2.Bean3Factory"/>
<bean id="bean3" factory-bean="bean3Factory" factory-method="getBean3"/>
在方法中运行
@Test
public void demo3() {
//创建工程
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
Bean3 bean3=(Bean3) applicationContext.getBean("bean3");
}
总结: 静态工厂方法和实例工厂方法方法的区别
1.在建立工厂类的时候一个是静态的一个不是静态的
2.在配置XML的时候,实例工厂需要显配置实例工厂,然后再配置要实例的类,因为静态的工厂类可以直接通过类名得到方法,而非静态类不能使用对象.方法。
网友评论