1.构造实例化(默认)
通过默认的无参构造函数对Bean进行实例化
2.静态工厂方式实例化
通过工厂的静态方法进行创建对象
配置文件需要写出factory-method
注意:静态工厂是在读取配置文件时就已经创建了对象
配置文件
<bean id="MB" class="cn.qyc.spring.MyBeanFactory" factory-method="getBean"></bean>
工厂
package cn.qyc.spring;
public class MyBeanFactory {
public static MyBean getBean(){
System.out.println("调用工厂");
return new MyBean();
}
}
bean
package cn.qyc.spring;
public class MyBean {
public void getname() {
System.out.println("调用MyBean的getname()方法");
}
}
test
@Test
public void static_test(){
String xmlPath = "applicationContext.xml";
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
MyBean myBean = applicationContext.getBean("MB",MyBean.class);
myBean.getname();
}
调用工厂
3.实例工厂方式实例化
通过非静态的工厂方法实例化对象
配置文件要写俩个bean
然后通过第二个bean来完成实例化
<bean id="FB" class="cn.qyc.spring.MyBeanFactory1"></bean>
<bean id="Fb1" factory-bean="FB" factory-method="getBean"></bean>
工厂
package cn.qyc.spring;
public class MyBeanFactory1 {
public MyBean getBean() {
System.out.println("调用非静态工厂 实例工厂");
return new MyBean();
}
}
测试
@Test
public void fstatic_test(){
String xmlPath = "applicationContext.xml";
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
MyBean myBean = applicationContext.getBean("Fb1",MyBean.class);
myBean.getname();
}
调用工厂
调用非静态工厂 实例工厂
调用MyBean的getname()方法
注意:输出“调用工厂”的原因是我的配置文件里有静态的一个bean ,在调用配置文件时就已经实例化了类。