一般我们在程序中使用的bean都是POJO,通过使用spring来管理这些Bean,我们把他们称之为“托管Bean”。通过初步学习IoC和DI我们了解到实例化Bean有以下几种方式:
1.构造方法生成
要指定要在容器本身通过反复调用其构造函数直接创建bean的情况下构造的bean类,这与使用new运算符的Java代码相当。
这种实例化的实现,需要配置元数据,例如:
<bean id="XXXX" class="所在包.类名"></bean>
2.使用静态工厂方法进行实例化
首先要搞清楚的是什么是静态工厂方法:就是写一个静态方法,专门用于创建,生产类的对象。每调用一次这个方法就会有新的对像产生。
举个栗子:(懒汉单例模型)
public class Myproperties extends Properties {
private static Myproperties mp;
//单例
private Myproperties(){
//这里写入业务代码
System.out.println("Myproperties 的无参构造方法");
}
//懒汉单例模式,在被调用的时候才new
public static Myproperties getInstance(){
if(mp==null){
mp = new Myproperties();
}
return mp;
}
}
接着配置beans.xml:
<!-- 静态工厂方法创建bean -->
<bean id="mp" class="所在包.Myproperties" factory-method="getInstance"/> <!--这里getInstance就是方法名-->
然后我们去测试类里看看效果:
public void testApp(){
//实例化容器,spring要在自己创建的时候,就读取beans.xml并通过反射机制创建对象
ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"beans.xml"});
Myproperties mp = (Myproperties) context.getBean("mp");
System.out.println(mp);
}
运行结果是这样的:{}
3.通过实例工厂进行实例化
首先要搞清楚什么是实例工厂方法,看这个名字就知道。首先要创建这个工厂类的对象,然后通过对象来调用实例化方法来创建。
举个栗子:
这里Apple.java基本类就没写出来了
public class AppleFactory {
private static Apple apple ;
private AppleFactory(){
}
public Apple createAppleInstance(){
apple = new Apple();
return apple;
}
}
看看beans.xml:
<!-- 实例工厂方法创建bean -->
<bean id="appleFactory" class="所在包名.AppleFactory"/>
<bean id="apple" factory-bean="appleFactory" factory-method="createAppleInstance"/>
再瞧瞧测试:
public void testApp6(){
ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"beans.xml"});
Apple apple = (Apple) context.getBean("apple");
System.out.println(apple.getAid());
}
运行结果:4437