spring-FactoryBean的用法

2020-06-29  本文已影响0人  guessguess

测试方法还是之前的

@Configuration
@ComponentScan(basePackages = "com.gee")
public class Config {
    
    public static void main(String args[]) {
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(Config.class);
        System.out.println(applicationContext.getBean(Student.class));
    }
}

我们来看看FactoryBean接口的定义

public interface FactoryBean<T> {


    @Nullable
    T getObject() throws Exception;

    @Nullable
    Class<?> getObjectType();

    default boolean isSingleton() {
        return true;
    }
}

下面我们定义一个类
public class Student {

}

随后实现FactoryBean接口
@Component    需要被spring管理,所以需要注册到spring的容器中去。
public class StudentFactoryBean implements FactoryBean<Student>{

    @Override
    public Student getObject() throws Exception {
        // TODO Auto-generated method stub
        return new Student();
    }

    @Override
    public Class<?> getObjectType() {
        // TODO Auto-generated method stub
        return Student.class;
    }
}

测试代码,最后的输出结果,说明默认是单例的
com.gee.demo.entity.Student@62e136d3
com.gee.demo.entity.Student@62e136d3
那么下面改写一下方法,将isSingleton改为false,再看看输出结果,结果与上面完全不同
com.gee.demo.entity.Student@62e136d3
com.gee.demo.entity.Student@c8e4bb0

上一篇 下一篇

猜你喜欢

热点阅读