簡體   English   中英

在spring boot配置類中,為什么要使用Bean注釋並將方法設置為“public”?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM