[英]Why cant I register a HttpRequestHandlerServlet via @Bean annotation in Spring Boot
[英]In spring boot config class, why should I use Bean annotation and set the method 'public'?
我正在學習Spring boot + oauth2 + JWT,在AuthorizationServerConfig.class(或其他一些配置類)中,我注意到在很多例子中,他們使用@Bean注釋來修飾某些方法,並將方法設置為'public' 。 例如:
@Configuration
@EnableAuthorizationServer
@Slf4j
public class AuthorizationServerConfig extends
AuthorizationServerConfigurerAdapter {
....
....
@Bean
public TokenStore tokenStore() {
return new JwtTokenStore(this.accessTokenConverter());
}
....
}
如果我正在刪除Bean注釋並使該方法保密,我的應用程序仍然有效。 所以我的問題是,為什么我們需要Bean注釋並公開方法?
在Spring中,@ Bean注釋是一種向IOC上下文公開特定對象實例的方式(我認為最簡單的方法)。 這意味着您可以使用@Autowired注釋( 舊的但很好的文檔 )在任何其他bean中“返回”此實例
Spring Boot是一種“spring autoconfigurator”,它將通過為通用設置提供應用程序所需的所有Bean來自動配置spring上下文。 Spring Boot提供了通過java類和屬性文件自定義環境的功能。 在你的情況下,你通過一個java類(帶有@Configuration注釋的類)自定義spring上下文,你用自己的實例覆蓋了默認的spring TokenStore bean,在這種情況下,它可能是一個語義上等於提供的實例的實例。 Spring Boot這就是為什么你刪除@Bean注釋或者將“private”關鍵字放到應用程序正在運行的方法的原因,因為Spring引導時會自動將相同的bean注入Spring環境(我假設有一個類通過@Autowire使用你的TokenStore)。
我希望這個小的(非常簡化的)解釋可以幫助你理解spring boot的工作原理:)
如果刪除Bean和公共方法,那么它將在Spring上下文中不可用,例如,你將無法(獲取null
值)在Spring類中自動連接它
@Autowired
TokenStore tokenStore
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.