• Spring学习记录(十)---使用FactoryBean配置Bean


    之前学了,配置bean可以用普通全类名配置、用工厂方法配置,FactoryBean又是什么呢

    有时候配置bean要用到,IOC其他Bean,这时,用FactoryBean配置最合适。

     FactoryBean是一个接口,要用的话就要实现它。他有三个方法:

      getObject()  //返回bean对象

      getObjectType()  //返回bean的类型

        isSingleton()   //是否单例

     弄个例子:

     Car类

     1 package com.guigu.spring.factorybean;
     2 
     3 
     4 public class Car {
     5     private String brand;
     6     private double price;
     7     
     8     public Car(){
     9     }
    10     public Car(String brand,double price){
    11         this.brand=brand;
    12         this.price=price;
    13     }
    14     public String getBrand() {
    15         return brand;
    16     }
    17     public void setBrand(String brand) {
    18         this.brand = brand;
    19     }
    20     public double getPrice() {
    21         return price;
    22     }
    23     public void setPrice(double price) {
    24         this.price = price;
    25     }
    26     @Override
    27     public String toString() {
    28         return "Car [brand=" + brand + ", price="+price +"]";
    29     }
    30 }

     CarFactoryBean.java

     1 package com.guigu.spring.factorybean;
     2 
     3 import org.springframework.beans.factory.FactoryBean;
     4 
     5 public class CarFactoryBean implements FactoryBean<Car> {
     6 
     7     private String brand;
     8      
     9     //返回bean对象
    10     @Override
    11     public Car getObject() throws Exception {
    12         return new Car(brand,500000);
    13     }
    14 
    15     //返回bean的类型
    16     @Override
    17     public Class<?> getObjectType() {
    18         return Car.class;
    19     }
    20     //是否单例
    21     @Override
    22     public boolean isSingleton() {
    23         return true;
    24     }
    25 
    26     public void setBrand(String brand) {
    27         this.brand = brand;
    28     }
    29 
    30 }

     bean-beanfactory中要配置的bean

    1   <bean id="car" class="com.guigu.spring.factorybean.CarFactoryBean">
    2       <property name="brand" value="BMW"></property>
    3   </bean>

    main函数

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

     输出:

     Car[brand=BMW, price=500000]

    学到这里,我想了想,好像和一开始用类名配置的没什么区别啊!

    再看一下xml中的笔记:

     1      <!-- 
     2         通过 FactoryBean 来配置Bean 的实例
     3         class : 指向 FactoryBean 的全类名
     4         property :配置 FactoryBean 的属性
     5         但实际返回实例确是 FactoryBean 的 getObject() 方法返回的实例!
     6         
     7      -->
     8 
     9  <bean id="car" class="com.guigu.spring.factorybean.CarFactoryBean">
    10      <property name="brand" value="BMW"></property>
    11  </bean>

     但实际返回实例确是 FactoryBean 的 getObject() 方法返回的实例!

     估计就是这里了,区别应该就是父接口带来的三个方法,后面会继续看

     

    另外说一下,这个FactoryBean 不是前面的BeanFactory

     之前的笔记:

  • 相关阅读:
    有线电视网
    crash的数字表格
    编译安装软件步骤
    ansible剧本--实现一键部署nfs服务
    ansibile剧本---实现一键部署rsync备份服务
    Common Palindromes Aizu
    Common Palindromes Aizu
    Palisection CodeForces
    Palisection CodeForces
    浅谈Palindromic Tree——回文树(回文自动机)
  • 原文地址:https://www.cnblogs.com/ooooevan/p/5805125.html
Copyright © 2020-2023  润新知