当前位置: 首页>编程语言>正文

FactoryMethod与FactoryBean

在Spring中当需要实例化第三方类库中的类时,可以使用FactoryMethod或者FactoryBean实现解耦。例如Car是第三方类库中的一个类,当我们需要使用Car对象时,可以有如下几种方式。

Instance Factory Method

  • 静态方法

    public class StaticFactory {
        public static Car getInstance() {
            return new Car();
        }
    }
    
  • XML配置

    <!--静态工厂方法模式配置-->
    <bean id="car" class="com.sac.factory.StaticFactory" factory-method="getInstance">  </bean>
    

Instance Factory Method

  • 实例方法

    public class NoneStaticFactory {
        public  Car getInstance() {
            return new Car();
        }
    }
    
  • XML配置

    <!--实例工厂方法模式配置-->
    <bean id="noneStaticFactory" class="com.sac.factory.NoneStaticFactory"></bean>
    <bean id="car" factory-bean="noneStaticFactory" factory-method="getInstance"></bean>
    

FactoryBean

  • CarFactoryBean

    public class CarFactoryBean implements FactoryBean<Car> {
        @Override
        public Car getObject() {
            return new Car();
        }
    
        @Override
        public Class<Car> getObjectType() {
            return Car.class;
        }
    
        @Override
        public boolean isSingleton() {
            return false;
        }
    }
    
  • XML 配置

      <bean id="car" class="com.sac.factorybean.CarFactoryBean"></bean>
    
  • 加&与不加&

    在使用FactoryBean时,如果想获取FactoryBean的实例则需要在bean名称前添加&,否则获取的是getObject方法中返回的实例。
    例如,获取Bean带着&

      ApplicationContext ctx = new ClassPathXmlApplicationContext("spring.xml");
      System.out.println(ctx.getBean("&car"));
    

    输出结果

    com.sac.factorybean.CarFactoryBean@7d70d1b1
    

    不带着&

     ApplicationContext ctx = new ClassPathXmlApplicationContext("spring.xml");
     System.out.println(ctx.getBean("car"));
    

    输出结果

    com.sac.bean.Car@7d70d1b1
    

https://www.xamrdz.com/lan/5w92016701.html

相关文章: