为了账号安全,请及时绑定邮箱和手机立即绑定

通过方法调用与新运算符获取 Spring bean

通过方法调用与新运算符获取 Spring bean

HUX布斯 2022-06-04 10:41:08
我对这个小话题感到困惑。我在某处读到,如果一个类用 注释@Component,它是 spring 管理的 bean,每当需要时,spring 都会提供它。我将它与 bean 的范围混淆了。让我解释:比方说一堂课@Componentpublic class Example{ }如果我在其他类中使用 实例化这个类new Example(),容器会一直为我提供相同的 Example 对象吗?还是每次都会返回我新的对象?这是令人困惑的部分:如果在同一个班级我有两个这样的豆子:@Componentpublic class Example {    @Bean DataSource sqlDataSource() {         // some logic    }    @Bean @Scope("prototype") SomeObject getSomeObject() {         return new SomeObject(sqlDataSource()); //**    }}在这种情况下会发生什么?每次请求 SomeObject bean 时,sqlDataSource() 方法调用都会一次又一次地返回相同的对象,还是每次请求 SomeObject 时都会返回新的 DataSource 实例?请帮忙。
查看完整描述

2 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

是一个方法级别的注解,指示 Spring 在调用该方法时创建一个 bean。这意味着具有与 XML 配置中的标记相同的功能。

这个注解必须在 @Configuration 注解的类中使用,否则如果你从另一个方法调用该方法,它将是一个普通的 java new 操作,而不是 spring 的。请参阅这篇文章-> @Bean inside class with @Configuration and witout

牢记这一点 new SomeObject(sqlDataSource()); 将等于 new SomeObject(new SqlDataSource());

如果您使用 @Configuration 注释 Example 将会发生的是,您将始终获得一个具有相同 sqlDataSource 对象的新 SomeObject 实例,这意味着 Spring 将只创建一个 sqlDataSource 因为它是单例的。


查看完整回答
反对 回复 2022-06-04
?
POPMUISE

TA贡献1765条经验 获得超5个赞

@Bean DataSource sqlDataSource() {

     // some logic

}

这定义了 DataSource 的单例实例。因此,每次您请求 SomeObject 的实例时,都会创建一个新的 SomeObject(虽然它是在原型范围内定义的),但它们都将共享相同的 DataSource 对象(因为它是一个单例 bean)。


查看完整回答
反对 回复 2022-06-04
  • 2 回答
  • 0 关注
  • 83 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号