zoukankan      html  css  js  c++  java
  • 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

     之前的笔记:

  • 相关阅读:
    tar命令,vi编辑器
    Linux命令、权限
    Color Transfer between Images code实现
    利用Eclipse使用Java OpenCV(Using OpenCV Java with Eclipse)
    Matrix Factorization SVD 矩阵分解
    ZOJ Problem Set
    Machine Learning
    ZOJ Problem Set
    ZOJ Problem Set
    ZOJ Problem Set
  • 原文地址:https://www.cnblogs.com/ooooevan/p/5805125.html
Copyright © 2011-2022 走看看