IOC(FactoryBean)

  FactoryBean

           IOC实现的时候,BeanFactory:bean工厂,是ioc最基本的实现,作用是帮助我们管理bean (默认)

                                       FactoryBean:这个就叫工厂bean 专门作为一个bean交给IOC容器管理。

 结论: 配置一个bean,如果没有实现FactoryBean接口:配置什么类型,就能够得到什么类型;

  配置一个bean,如果实现了FactoryBean接口:配置  FactoryBean实现类类型,得到getObject()方法返回的对象

 

public class User {
   private Integer id;
   private String username;
   private String password;
   private Integer age;

   public User() {
       System.out.println("生命周期1:实例化");
    ...
  }

     接口

package com.atguigu.spring.factory;

import com.atguigu.spring.pojo.User;
import org.springframework.beans.factory.FactoryBean;

/**
* FactoryBean是一个接口,需要创建一个类实现该接口
* 其中有三个方法:
*   getObject():通过一个对象交给ioc容器管理
*   getObject():设置所提供对象的类型
*   isSingLeton():所提供的的对象是否单例
* 当把FactoryBean的实现类配置为bean时,会将当前类中getObject()所返回的对象交给IOC容器管理
*/
public class UserFactoryBean implements FactoryBean<User> {

   @Override
   public User getObject() throws Exception {
       return new User();
  }

   @Override
   public Class<?> getObjectType() {
       return User.class;
  }
}

   XML文件

<!--加载配置文件获取ioc容器时候,其实是把当前UserFactoryBean里面的getObject()方法所返回的对象交给ioc容器-->
   <bean class="com.atguigu.spring.factory.UserFactoryBean"></bean>
    @Test
   public void testFactoryBean(){
       ApplicationContext ioc=new ClassPathXmlApplicationContext("ApplicationContext.xml");
       User bean = ioc.getBean(User.class);
       System.out.println(bean);
       /**
        * 生命周期1:实例化
        * User{id=null, username='null', password='null', age=null}
        */
  }
 
posted @ 2022-11-13 20:49  zjw_rp  阅读(32)  评论(0)    收藏  举报