
factorybean与new实例化对象的区别与实现
在 spring 中,使用 @factorybean 注解可以创建一个 factorybean,它负责创建和管理 bean 实例。与直接使用 new 实例化对象相比,factorybean 有以下区别:
bean 的创建时机
bean 的管理
实现factorybean
要实现一个 factorybean,需要实现以下接口:
public interface factorybean<t> {
t getobject() throws exception;
class<?> getobjecttype();
boolean issingleton();
}如何区分 new 和 factorybean 创建的 bean
springboot 中提供了 @primary 注解,可以将特定 bean 标记为优先级更高的候选对象。当存在多个候选对象时,spring 会自动选择优先级更高的那个。
示例代码
假设需要区分使用 new 实例化和通过 factorybean 创建的 a 接口实现:
public class test {
@primary
public a newa() {
return new b();
}
@bean
public factorybean<a> factorybeana() {
return new factorybean<a>() {
@override
public a getobject() throws exception {
return new c();
}
@override
public class<?> getobjecttype() {
return a.class;
}
@override
public boolean issingleton() {
return true;
}
};
}
}在 main 方法中使用依赖注入获取 a 接口的实现:
@Autowired private A a;
此时,a 指向的将是通过 factorybean 创建的 c 类实例,因为 newa() 方法被标记为 @primary。
以上就是Spring 中FactoryBean 与 new 实例化对象的区别:何时创建、谁来管理、如何区分?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号