zoukankan      html  css  js  c++  java
  • Spring基础16——使用FactoryBean来创建

    1.配置bean的方式

    配置bean有三种方式:通过全类名(class反射)、通过工厂方法(静态工厂&实例工厂)、通过FactoryBean。前面我们已经一起学习过全类名方式和工厂方法方式,下面通过这篇文章来学习一下FactroyBean.

    2.FactoryBean配置bean

    FactoryBean是Spring给我们提供的一个接口,我们来看一下这个接口的源码:

     1 public interface FactoryBean<T> {
     2     @Nullable
     3     T getObject() throws Exception;
     4 
     5     @Nullable
     6     Class<?> getObjectType();
     7 
     8     default boolean isSingleton() {
     9         return true;
    10     }
    11 }

    这个接口中为我们提供了三个方法:

    getObject():返回bean本身
    getObjectType():返回FactoryBean创建Bean的类型。 
    isSingleton():返回bean是否是单例的
    我们有全类名配置,也有工厂方法配置,为什么我们还要用这种FactoryBean来配置Bean呢?因为我们在配置一个bean的时候需要用到另一个bean的时候,使用FactoryBean在合适不过了
    下面来具体操作一下:

    首先我们创建一个Car的FactoryBean去实现FactoryBean接口:
     1 public class CarFactoryBean implements FactoryBean {
     2     private String brand;
     3 
     4     public void setBrand(String brand) {
     5         this.brand = brand;
     6     }
     7 
     8     @Nullable
     9     public Object getObject() throws Exception {
    10         return new Car("BMW", 5000000);
    11     }
    12 
    13     @Nullable
    14     public Class<?> getObjectType() {
    15         return Car.class;
    16     }
    17 
    18     public boolean isSingleton() {
    19         return true;
    20     }
    21 }

    Spring配置文件:

    1 <!--通过factorybean来配置bean的实例,通过class来指向factorybean的全类名,property指的factory的属性-->
    2 <!--,但实际返回的的是,getObject方法返回的实例。-->
    3 <!--我们在配置bean的时候经常需要用的ioc容器里的其他bean,在factorybean中处理你传入的其他bean以达到目的-->
    4 <bean id="car1" class="com.wzy.factorybean.CarFactoryBean">
    5     <property name="brand" value="audi"/>
    6 </bean>
    
    

    编写Main测试类:

    1 public class Main {
    2     public static void main(String[] args) {
    3         ApplicationContext ctx = new ClassPathXmlApplicationContext("bean-factorybean.xml");
    4 
    5         Car car1 = (Car) ctx.getBean("car1");
    6 
    7         System.out.println(car1);
    8     }
    9 }

    输出结果:

    3.FactoryBean总结

    通过Factorybean来配置bean的实例,通过class来指向factorybean的全类名,property指的factory的属性,我们在配置bean的时候经常需要用的ioc容器里的其他bean,在factorybean中处理你传入的其他bean以达到目的。但实际返回的的是,getObject方法返回的实例

     




  • 相关阅读:
    tfs中如何创建团队项目及如何操作团队项目
    Qt出现常量有换行符的错误的解决方法
    .net程序在无.net环境下运行
    无法定位程序输入点__gxx_personality_v0的一个解决方法
    SQL Server2012中的SequenceNumber
    GDB十分钟教程
    使用vscode对c进行调试
    sqlserver 操作xml
    使用HttpOnly提升Cookie安全性
    SQL localdb 连接字符串
  • 原文地址:https://www.cnblogs.com/fengyun2019/p/10843275.html
Copyright © 2011-2022 走看看