1、Bean的4种实例化方式
1)构造器实例化:要有无参数构造器,最标准,使用最多
2)静态工厂方法实例化:解决系统遗留问题
3)实例工厂方法实例化:解决系统遗留问题
4)实现FactoryBean接口实例化:实例工厂的变种(简化配置),集成其他框架使用:LocalSessionFactoryBean
public class someBeanX{ }
<!-- ①构造器实例化(无参构造器),最标准,使用最多 -->
<bean id="someBean1" class="SomeBean1全限定名"/>
<!-- ②静态工厂方法实例化:解决系统遗留问题 -->
<!--
Class clz = Class.forName("xxx.xxx.SomeBean2Factory");
Method m = clz.getMethod("getSomeBean2");
SomeBean2 someBean2 = m.invoke(null,null);
-->
<bean id="someBean2" class="SomeBean2Factory全限定名" factory-method="getSomeBean2"/>
<!-- ③实例工厂方法实例化:解决系统遗留问题 -->
<bean id="someBean3Factory" class="SomeBean3Factory全限定名"/>
<bean id="someBean3" factory-bean="someBean3Factory" factory-method="getSomeBean3"/>
<!-- ④实现FactoryBean接口实例化:实例工厂的变种,集成其他框架使用:LocalSessionFactoryBean -->
<bean id="someBean4" class="SomeBean4FactoryBean全限定名"/>
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration public class CreateBeanTest{
@Autowired private ApplicationContext ctx; // ①构造器实例化(无参构造器),最标准,使用最多 @Test public void testConstructor(){ // new SomeBean1(); SomeBean1 someBean1 = ctx.getBean("someBean1",SomeBean1.class); System.out.println(someBean1); } // ②静态工厂方法实例化:解决系统遗留问题 @Test public void testStaticFactory(){ // 工厂类.静态工厂方法---->创建对象 // SomeBean2 someBean2 = SomeBean2Factory.getSomeBean2();// System.out.println(someBean2); SomeBean2 someBean2 = ctx.getBean("someBean2",SomeBean2.class); System.out.println(someBean2); }
// ③实例工厂方法实例化:解决系统遗留问题
@Test
public void testInstanceFactory(){
// 工厂类对象.实例工厂方法---->创建对象
// SomeBean3Factory someBean3Factory = new SomeBean3Factory();
// SomeBean3 someBean3 = someBean3Factory.getSomeBean3();
// System.out.println(someBean3);
SomeBean3 someBean3 = ctx.getBean("someBean3",SomeBean3.class);
System.out.println(someBean3);
}
// ④实现FactoryBean接口实例化:实例工厂变种,集成其他框架使用:LocalSessionFactoryBean
@Test
public void testFactoryBean(){
SomeBean4 someBean4 = ctx.getBean("someBean4",SomeBean4.class);
System.out.println(someBean3);
}
}
public class SomeBean2Factory{ public static SomeBean2 getSomeBean2(){ return new SomeBean2(); } }
public class SomeBean3Factory{ public SomeBean3 getSomeBean3(){ return new SomeBean3(); } }
public class SomeBean4FactoryBean implements FactoryBean<SomeBean4>{
// 返回SomeBean4对象
@Override public SomeBean4 getObject() thows Exception{ return new SomeBean4(); }
// 返回创建对象的类
@Override
public Class<?> getObjectType(){
return SomeBean4.class;
}
// 是否是单例的
@Override public boolean isSingleton(){ return true; } }