亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

@Configuration(注解類) + @Bean(注解方法) 相當于xml配置中bean,那么與@Component, @Repository, @Service, @Controller定義的Bean有什么區別

@Configuration(注解類) + @Bean(注解方法) 相當于xml配置中bean,那么與@Component, @Repository, @Service, @Controller定義的Bean有什么區別

正在回答

3 回答

一樓說得太粗了。這樣說,我也可以說golang和Java本質沒什么區別,只是語言理念不同。

二樓從應用的角度,解釋了一樓提出的分類問題。

當然,我也懶得詳細說明,簡單粘貼以前寫的一份隨筆記錄:

但從官方文檔來看,兩者還意味著bean加載方式的不同。

(@Bean也需要標注在@Configuration標注的類中,@Configuration繼承@Component)


雖然Component注解也會當做配置類,但是并不會為其生成CGLIB代理Class。而@Configuration標注的配置類,會通過CGLIB代理Class(詳見ConfigurationClassPostProcessor#enhanceConfigurationClasses),所以每次都是獲取IOC容器中的固定的bean。


@Bean就得看所在類是@Component標注,還是@Configuration標注了。

在配置類的方法間調用時,如果類時@component標注的,每次調用獲取的都是新的實體;而如果是@configuration標注的話,每次調用返回的是同一個實體Bean。其他方面都是相同,可以無差別使用(裝配注入等)。


這是因為@Configuration標注下的@Bean調用函數使用都是代理對象,獲取的都是從IOC容器里獲取的bean,因此都是同一個。而@Component標注下的@Bean下只是普通的函數方法調用,因此每次調用后,都不是同一個。


(另外,bean最早注冊進入IOC容器,也還是反射方式。并且@Scope是注入處的范圍,不在此)


另外建議題主,可以看看官方文檔。這個問題在官方文檔中,有明確說明的。


0 回復 有任何疑惑可以回復我~

@Component 是可以用以所有類 @Repository一般用于持久層操作數據庫上的 @Service 一般用于業務邏輯里面的實現類,@Controller 一般是用于控制器上的注解 @Bean 一般是跟@Configuration一起用的相當于<beans><bean></bean></beans>


0 回復 有任何疑惑可以回復我~

都是bean,本質上沒有什么區別,只是對bean的應用分了類

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

@Configuration(注解類) + @Bean(注解方法) 相當于xml配置中bean,那么與@Component, @Repository, @Service, @Controller定義的Bean有什么區別

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號