SpringBoot原理篇:FactoryBean的使用

 某类实现FactoryBean之后, 交给spring管理, 获取bean, 不是某类自己,可以是别的类

package com.qing.config;

import com.qing.bean.DogFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;

@ComponentScan({"com.qing.bean","com.qing.config"})
public class SpringConfig4 {

    @Bean
    public DogFactoryBean lovelyDog() {
        return new DogFactoryBean();
    }
}

 因为DogFactoryBean实现了FactoryBean, getObject()方法返回的是Dog

package com.qing.bean;

import org.springframework.beans.factory.FactoryBean;


public class DogFactoryBean implements FactoryBean<Dog> {

    @Override
    public Dog getObject() throws Exception {
        //可以做一系列的初始化工作
        Dog dog = new Dog("可乐",3);
        return dog;
    }

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

    //非单例模式
    @Override
    public boolean isSingleton() {
        return false;
    }
}

 测试

package com.qing.app;

import com.qing.config.SpringConfig4;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class App4 {
    public static void main(String[] args) {
        ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig4.class);
        String[] names = ctx.getBeanDefinitionNames();
        for (String name: names) {
            System.out.println("bean的名字:"+name);
        }

        System.out.println(ctx.getBean("lovelyDog"));
    }
}

 结果

 

猜你喜欢

转载自blog.csdn.net/m0_45877477/article/details/125647568