Spring随笔(05)

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; } }

 

  

 

  

  

posted @ 2017-02-20 16:32  LuoMsg  阅读(171)  评论(0编辑  收藏  举报