日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

Spring Bean的装配(非XML文件方式)

發(fā)布時(shí)間:2024/9/21 asp.net 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Bean的装配(非XML文件方式) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

Spring提供三種裝配Bean的方法:

  • 自動(dòng)化裝配Bean
  • Java 代碼中顯式配置Bean
  • XML配置文件配置Bean

自動(dòng)化裝配Bean:

使用到的注解:

  • @Configuration:標(biāo)記在class上,表示該類是一個(gè)配置類,配置類并不參與業(yè)務(wù)邏輯,只是告訴Spring該類里面是一些配置項(xiàng),比如Spring默認(rèn)不開啟組件掃描,可以在該類里面配置開啟組件掃描
  • @ComponentScan:該注解能夠在Spring中開啟組件掃描,標(biāo)記在配置類上
  • @Component:標(biāo)記在class上,表示該類是一個(gè)組件類,通知Spring要為這個(gè)類創(chuàng)建bean
  • @Autowired:標(biāo)記在類的字段或者方法上,Spring會(huì)在滿足依賴的情況下進(jìn)行自動(dòng)裝配

@Configuration:

Spring自動(dòng)掃描默認(rèn)沒(méi)有開啟,所以我們需要配置開啟組件掃描。當(dāng)然可以通過(guò)XML文件配置,但新Spring支持Java配置。

要使用Java配置Spring需要一個(gè)配置類,這個(gè)類沒(méi)有邏輯意義,只是用來(lái)配置Spring。創(chuàng)建配置類只需要簡(jiǎn)單的在類上使用@Configuration標(biāo)記即可。

創(chuàng)建配置類代碼:

@Configuration public class SpringConfig{ }

@ComponentScan:

該標(biāo)簽可以配置在Spring中開啟組件掃描。使用方法也很簡(jiǎn)單,在配置類上打上該標(biāo)簽即可。

@Configuration @ComponentScan public class SpringConfig{ }

上面這種方式默認(rèn)會(huì)以配置類所在的包作為基礎(chǔ)包來(lái)掃描組件。如果想掃描不同的包或者多個(gè)包怎么辦?那么就需要在注解中明確指定要掃描的包:

@ComponentScan(basePackages={"music","video"})

@Component:

我們?cè)诮M件類上添加該標(biāo)簽通知Spring為該類創(chuàng)建Bean。比如我們有一個(gè)Login接口,該接口有一個(gè)LoginImpl實(shí)現(xiàn),很明顯,我們需要為L(zhǎng)oginImpl配置一個(gè)Bean,使用自動(dòng)裝配的話只需要在LoginImpl類上添加@Component注解即可。

可能會(huì)有疑問(wèn)Spring自動(dòng)創(chuàng)建的Bean的id是什么?我應(yīng)該如何獲取這個(gè)Bean?Spring會(huì)將Bean的id設(shè)置為class的名字,但會(huì)將第一個(gè)字母變?yōu)樾?。如下面例?#xff0c;這個(gè)Bean的id則是 ”loginImpl“ 。

interface Login{boolean isLogin(); }@Component public class LoginImpl implements Login{@Overridepublic boolean isLogin(){} }

當(dāng)然可以為Bean指定名字,通過(guò)在標(biāo)簽中添加id字符串即可。

@Component("myLogin")

@Autowired:

該注解會(huì)根據(jù)依賴關(guān)系自動(dòng)將Bean裝配到相應(yīng)的地方。

public class test(){@AutowiredLogin login;//其他操作 }

總結(jié):

只需要使用上面的四個(gè)注解,就可以實(shí)現(xiàn)Spring自動(dòng)裝配Bean。一般情況下盡可能使用自動(dòng)裝配的方法,因?yàn)樵陧?xiàng)目中顯式的配置越少越好。

Java 代碼中顯式配置Bean:

使用到的注解:@Bean

@Bean:

簡(jiǎn)單聲明Bean:

注意,該注解標(biāo)記在方法上,告訴Spring該方法將返回一個(gè)對(duì)象,該對(duì)象要注冊(cè)為Spring應(yīng)用上下文中的Bean。方法體包含最終產(chǎn)生bean實(shí)例的邏輯。

//這里不需要@ComponentScan注解,因?yàn)椴皇亲詣?dòng)裝配 @Configuration public class SpringConfig{//這里手動(dòng)配置LoginImpl的Bean@Beanpublic Login loginImpl(){return new LoginImpl();} }

默認(rèn)情況下返回的Bean的id與帶有@Bean注解的方法名是一樣的,上面的例子Bean的id就是 “l(fā)oginImpl"。如果想設(shè)置其他id,可以重命名這個(gè)方法名即可;另一種方法就是在@Bean中指定名字:

@Bean("loginImpl2")

實(shí)現(xiàn)注入:

上面的例子很簡(jiǎn)單,但如果一個(gè)Bean依賴與其他對(duì)象應(yīng)該如何寫?比如LoginImpl依賴Identity對(duì)象。

第一種方法:

如果Identity也像loginImpl()方法一樣有一個(gè)方法identityImpl()聲明了Bean,那么下面這種方法可以將Identity對(duì)象裝配到LoginImpl中。

@Bean public Login loginImpl(){return new LoginImpl(identityImpl());

第二種方法:

@Bean public Login loginImpl(Identity identity){return new LoginImpl(identity); }

這種方法是最佳的選擇,因?yàn)樵摲椒ú灰驣dentity在配置類中有顯式聲明Bean的方法,Identity可以是通過(guò)自動(dòng)掃描或者XML文件配置出來(lái)的Bean。當(dāng)Spring調(diào)用loginImpl創(chuàng)建loginImpl的bean時(shí),會(huì)自動(dòng)裝配一個(gè)Identity Bean進(jìn)來(lái),不管這個(gè)Identity Bean是自動(dòng)裝配來(lái)的還是java或者XML顯式配置來(lái)的。

注意:默認(rèn)情況下Spring中的Bean都是單例模式,也就是說(shuō)兩個(gè)IoginImpl bean會(huì)得到相同的LoginImpl實(shí)例。

總結(jié):

在必須顯示配置Bean的時(shí)候,優(yōu)先選擇JavaConfig配置。因?yàn)镴ava配置Bean的類型安全檢查更加強(qiáng)大。

XML配置文件配置Bean:

通過(guò)XML文件裝配Bean有點(diǎn)麻煩,可以看一看這篇資料 ----https://www.jb51.net/article/126458.htm。

轉(zhuǎn)載于:https://my.oschina.net/HuoQibin/blog/2223118

總結(jié)

以上是生活随笔為你收集整理的Spring Bean的装配(非XML文件方式)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。