美文网首页
spring5(3) - bean实例化方式

spring5(3) - bean实例化方式

作者: 小白201808 | 来源:发表于2018-09-16 16:29 被阅读79次

有四种方式

 1.构造器实例化(重点)
 2.静态工厂方法实例化
 3.实例工厂方法实例化
 4.实现FactoryBean接口实例化(重点)

第一种方式(构造器实例化(重点))

(1)cat类

package first_constructor;

public class Cat {
    //一个无参的构造器
    public Cat() {
        System.out.println("I am a cat constractor!!");
    }

}

(2) xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
   
<!-- 1.构造器实例化(无参构造器,最标志,使用最多) -->
<bean id = "cat" class ="first_constructor.Cat"/>

</bean>

(3) 测试

//测试类
@SpringJUnitConfig
public class Pub {

   @Autowired
   private Cat cat;
   
   
   @Test
   void testConstractor1() throws Exception {
       System.out.println(cat);
       
   }

}

第二种方式(静态工厂方法实例化)

(1) cat1 类

package second_static_factory;

public class Cat1 {
   public Cat1() {
       
   }

}

(2)cat1工厂类

package second_static_factory;
//Cat1的工厂
public class Cat1Factory {
   public static Cat1 createInstance() {
       Cat1 c1 = new Cat1();
       return c1;
   }

}

(3)在上面的xml配置文件中添加bean元数据

<!-- 2.静态工厂示例化,解决系统遗留问题 -->
<!-- 记得路径一定不要写成这样子second_static_factory/Cat1Factory.java,要不然会报找不到cat1错的 -->
<bean id = "cat1" class = "second_static_factory.Cat1Factory" 
 factory-method="createInstance"/>

(4) 在上面的测试类中添加以下代码

@Autowired
   private Cat1 cat1;
   
   void testConstractor1() throws Exception {
       System.out.println(cat);
       System.out.println(cat1);//添加
}

第三种方式(实例工厂方法实例化)

(1)cat2 类

package third_factory;

public class Cat2 {

}

(2)cat2factory类

package third_factory;

public class Cat2Factory {
    public Cat2 createInstance() {
        Cat2 cat2 = new Cat2();
        return cat2;
    }

}

(3)在上面的xml配置文件中添加bean元数据

<!-- 3.实例工厂方法实例化:解决系统遗留问题 --> 
 <!-- 先创建一个工厂对象,才可以引用里面的方法 -->
 <bean id = "factory2" class ="third_factory.Cat2Factory"/>
 <bean id = "cat2" factory-bean="factory2" factory-method="createInstance"/>
 

(4)在上面的测试类中添加以下代码

@Autowired
    private Cat2 cat2;
    
@Test
    void testConstractor1() throws Exception {
        System.out.println(cat);
        System.out.println(cat1);
        System.out.println(cat2);//添加
        
}           

第四种方式(实现FactoryBean接口实例化)

(1) cat3类

package fourth_factoryBean;

public class Cat3 {

}

(2) cat3factory类

package fourth_factoryBean;

import org.springframework.beans.factory.FactoryBean;

public class Cat3Factory implements FactoryBean<Cat3> {
    
   @Override
   public Cat3 getObject() throws Exception {
       Cat3 cat3 = new Cat3();
       return cat3;
   }

   @Override
   public Class<?> getObjectType() {
       
       return Cat3.class;
   }
  //从FactoryBean 中可以看出默认实单例模式的,
   //你可以修改为多例的,覆盖原来的方法
//  public boolean isSingleton() {
//      return false;
//  }
}

(3)在上面的xml配置文件中添加bean元数据

 <!-- 4.实现FactoryBean接口实例化 :实例工厂的变种,如集成MyBatis框架使用-->
 <bean id = "cat3" class = "fourth_factoryBean.Cat3Factory"/>
</beans>

(4)在上面的测试类中添加以下代码

@Autowired
    private Cat3 cat3;
    @Test
    void testConstractor1() throws Exception {
        System.out.println(cat);
        System.out.println(cat1);
        System.out.println(cat2);
        System.out.println(cat3);//添加
}       

相关文章

网友评论

      本文标题:spring5(3) - bean实例化方式

      本文链接:https://www.haomeiwen.com/subject/hakfnftx.html