本站资源收集于互联网,不提供软件存储服务,每天免费更新优质的软件以及学习资源!

Spring中FactoryBean与new实例化对象的区别:何时创建、谁来管理、如何区分?

网络教程 app 1℃

Spring中FactoryBean与new实例化对象的区别何时创建谁来管理如何区分

factorybean与new实例化对象的区别与实现

在 spring 中,使用 @factorybean 注解可以创建一个 factorybean,它负责创建和管理 bean 实例。与直接使用 new 实例化对象相比,factorybean 有以下区别:

bean 的创建时机

new 实例化对象:在 bean 被使用时立即创建。factorybean:在容器启动时创建,并缓存创建的 bean 实例。

bean 的管理

new 实例化对象:开发者需要自己管理 bean 的生命周期。factorybean:spring 容器负责管理 factorybean 及其创建的 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>() {@overridepublic a getobject() throws exception { return new c();}@overridepublic class<?> getobjecttype() { return a.class;}@overridepublic boolean issingleton() { return true;} }; }}

在 main 方法中使用依赖注入获取 a 接口的实现:

@Autowiredprivate A a;

此时,a 指向的将是通过 factorybean 创建的 c 类实例,因为 newa() 方法被标记为 @primary。

以上就是Spring 中FactoryBean 与 new 实例化对象的区别:何时创建、谁来管理、如何区分?的详细内容,更多请关注范的资源库其它相关文章!

转载请注明:范的资源库 » Spring中FactoryBean与new实例化对象的区别:何时创建、谁来管理、如何区分?

喜欢 (0)