美文网首页
BeanFactory与FactoryBean的区别

BeanFactory与FactoryBean的区别

作者: 养一只tom猫 | 来源:发表于2022-04-30 16:53 被阅读0次

    首先二者从名称上就能看到区别,BeanFactory是Spring提供的存放Bean的工厂,FactoryBean是一个可生产Bean的工厂Bean。

    FactoryBean

    FactoryBean是Spring提供给用户自定义Bean的工厂Bean,隐藏创建对象的细节。
    FactoryBean中有三个方法:

            // 用于返回Bean实例
        T getObject() throws Exception;
            // 返回Bean实例的class对象
        Class<?> getObjectType();
            // 返回当前Bean的作用域,默认单例
            default boolean isSingleton() {
            return true;
        }
    
    <bean id="userFactoryBean" class="com.xxx.factorybean.UserFactoryBean"/>
    
    public class User {
      public void hello() {
          System.out.println("hello ...... ");
      }
    }
    
    public class UserFactoryBean implements FactoryBean<User> {
        @Override
        public User getObject() throws Exception {
            return new User();
        }
    
        @Override
        public Class<?> getObjectType() {
            return User.class;
        }
    }
    ```java
    public static void main(String[] args) throws Exception {
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext("application.xml");
    
                    // 通过&可以在容器中取到FactoryBean本身的实例
            UserFactoryBean userFactoryBean = (UserFactoryBean) applicationContext.getBean("&userFactoryBean");
            User object = userFactoryBean.getObject();
            object.hello();
            
                    // 这里调用getBean传入FactoryBean的名称返回的并不是FactoryBean本身,而是User
            User user = (User) applicationContext.getBean("userFactoryBean");
            user.hello();
        }
    

    相关文章

      网友评论

          本文标题:BeanFactory与FactoryBean的区别

          本文链接:https://www.haomeiwen.com/subject/wxuyyrtx.html