javascript
【SpringBoot 2】(四)详析SpringBoot的常用注解
🛫更多知識(shí)總結(jié)見SpringBoot 2專欄
?🚕本篇知識(shí)點(diǎn)總結(jié)自尚硅谷雷神的視頻
🚒博主對(duì)于該知識(shí)尚在學(xué)習(xí)階段
🚄如果發(fā)現(xiàn)存在問題請(qǐng)毫不吝嗇的指出
🚀🚀扎哇太棗糕的博客首頁🚀🚀
目錄
向容器注冊(cè)組件@Bean
注冊(cè)組件的@Component
條件裝配@Conditional
導(dǎo)入配置文件@ImportResource
添加指定類的組件到容器@Import
配置綁定@ConfigrationProperties
向容器注冊(cè)組件@Bean
????????在Spring中向容器中注冊(cè)一個(gè)Bean使用的是applicationContext.xml配置文件中的bean標(biāo)簽,但是SpringBoot中使用的是MyConfig配置類中方法加@Bean注解。這兩種方式得到的結(jié)果是一樣的,只不過是兩種不同的編碼風(fēng)格而已。
????????單純的寫代碼還不行,要想辦法讓容器知道你想要注冊(cè)Bean,Spring使用的方法是在web.xml中聲明applicationContext.xml配置文件使其中的配置生效,SpringBoot使用的是@Configuration注解向容器中注冊(cè),因?yàn)榕渲妙惼浔旧矶砸彩且粋€(gè)組件。
🚩配置類中使用的注解
@Configuration:向SpringBoot聲明這是一個(gè)配置類,相當(dāng)于web.xml里的配置文件聲明
@Bean:向容器注冊(cè)注解下面方法返回值對(duì)應(yīng)的對(duì)象,相當(dāng)于bean標(biāo)簽。@Bean注解還可以使用參數(shù)給對(duì)象命名,相當(dāng)于bean標(biāo)簽中的id屬性。默認(rèn)命名為注解下面的方法名
🚩獲取指定的組件
? ? ? ? run.getBean()方法
🚩容器中對(duì)象創(chuàng)建模式
? ? ? ? 默認(rèn)為單例模式,也就是在容器中創(chuàng)建好所有的對(duì)象,當(dāng)外部需要獲取對(duì)象的時(shí)候跳過創(chuàng)建步驟直接去容器中拿即可,所以說無論外部調(diào)用多少次組件注冊(cè)方法獲取的都是同一個(gè)對(duì)象。
????????當(dāng)然還可以修改屬性proxyBeanMethods(Bean方法代理模式)的值進(jìn)行單例多例的切換,屬性值的改變導(dǎo)致SpringBoot底層擁有兩種配置模式:
- Full(全配置):proxyBeanMethods為true,單例,判斷容器中有沒有該對(duì)象,有則直接取無則創(chuàng)建
- Lite(輕量配置):proxyBeanMethods為false,多例,對(duì)象直接創(chuàng)建。相較于全配置的先判斷再創(chuàng)建或者獲取,Lite直接創(chuàng)建節(jié)省了時(shí)間,所以被稱為是輕量級(jí)配置。
????????如果存在組件依賴的問題的話,必須采用全配置。所謂的組件依賴就是說在容器中一個(gè)組件中的屬性是另一個(gè)組件或者說使用到了另一個(gè)組件,此時(shí)就稱這個(gè)組件依賴于另一個(gè)組件。如果采用輕量配置的話,這個(gè)組件中的屬性將不是另一個(gè)組件對(duì)象,雖然對(duì)象名稱都一樣但是地址不同。
注冊(cè)組件的@Component
@Component:每一層都通用的注解,用于注冊(cè)組件到容器中,相當(dāng)于bean標(biāo)簽。缺點(diǎn)就是辨識(shí)度不高,無法通過注解理清楚這是哪一層的業(yè)務(wù)
@Controller:controller層的作用相當(dāng)于@Component注解
@Service:service層實(shí)現(xiàn)類的作用相當(dāng)于@Component注解
@Repository:mapper層實(shí)現(xiàn)類的作用相當(dāng)于@Component注解
條件裝配@Conditional
@Conditional:滿足條件就向容器中注冊(cè)組件
案例一@ConditionalOnBean:容器中的組件之間存在組件依賴,當(dāng)被依賴的組件不存在的時(shí)候,不向容器中添加另一個(gè)組件
?? 如果將這個(gè)注解放在類上的話, 即是滿足條件時(shí)類中的所有方法才能生效,否則都不生效。
????并且在類中的組件注冊(cè)也是順序的,使用條件裝配注解時(shí)會(huì)因?yàn)樽?cè)寫在后面就被判斷為不滿足條件
案例二@ConditionalOnMissingBean:沒有組件時(shí)進(jìn)行裝配
導(dǎo)入配置文件@ImportResource
@ImportResource
添加指定類的組件到容器@Import
@Import:調(diào)用類中的無參構(gòu)造器創(chuàng)建一個(gè)對(duì)象作為組件添加到容器中,組件的默認(rèn)名為類的全限名
配置綁定@ConfigrationProperties
@ConfigrationProperties:將實(shí)體類與配置文件的配置項(xiàng)相綁定,直接給實(shí)體類中的屬性注入數(shù)據(jù)。prefix屬性是指定配置文件里引用屬性的前綴,且@ConfigrationProperties必須配合@Component注解使用才能讓容器知道有這么一個(gè)綁定規(guī)則
?如果@ConfigrationProperties不配合@Component注解使用的話,還可以在配置類上使用@EnableConfigurationProperties讓容器知道有這么一個(gè)綁定規(guī)則,屬性為實(shí)體類的class文件
?
總結(jié)
以上是生活随笔為你收集整理的【SpringBoot 2】(四)详析SpringBoot的常用注解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: axios安装_Vue脚手架安装,与基本
- 下一篇: 【SpringBoot 2】(九)异常处