Spring Bean的装配(非XML文件方式)
2019獨角獸企業重金招聘Python工程師標準>>>
Spring提供三種裝配Bean的方法:
- 自動化裝配Bean
- Java 代碼中顯式配置Bean
- XML配置文件配置Bean
自動化裝配Bean:
使用到的注解:
- @Configuration:標記在class上,表示該類是一個配置類,配置類并不參與業務邏輯,只是告訴Spring該類里面是一些配置項,比如Spring默認不開啟組件掃描,可以在該類里面配置開啟組件掃描
- @ComponentScan:該注解能夠在Spring中開啟組件掃描,標記在配置類上
- @Component:標記在class上,表示該類是一個組件類,通知Spring要為這個類創建bean
- @Autowired:標記在類的字段或者方法上,Spring會在滿足依賴的情況下進行自動裝配
@Configuration:
Spring自動掃描默認沒有開啟,所以我們需要配置開啟組件掃描。當然可以通過XML文件配置,但新Spring支持Java配置。
要使用Java配置Spring需要一個配置類,這個類沒有邏輯意義,只是用來配置Spring。創建配置類只需要簡單的在類上使用@Configuration標記即可。
創建配置類代碼:
@Configuration public class SpringConfig{ }@ComponentScan:
該標簽可以配置在Spring中開啟組件掃描。使用方法也很簡單,在配置類上打上該標簽即可。
@Configuration @ComponentScan public class SpringConfig{ }上面這種方式默認會以配置類所在的包作為基礎包來掃描組件。如果想掃描不同的包或者多個包怎么辦?那么就需要在注解中明確指定要掃描的包:
@ComponentScan(basePackages={"music","video"})@Component:
我們在組件類上添加該標簽通知Spring為該類創建Bean。比如我們有一個Login接口,該接口有一個LoginImpl實現,很明顯,我們需要為LoginImpl配置一個Bean,使用自動裝配的話只需要在LoginImpl類上添加@Component注解即可。
可能會有疑問Spring自動創建的Bean的id是什么?我應該如何獲取這個Bean?Spring會將Bean的id設置為class的名字,但會將第一個字母變為小寫。如下面例子,這個Bean的id則是 ”loginImpl“ 。
interface Login{boolean isLogin(); }@Component public class LoginImpl implements Login{@Overridepublic boolean isLogin(){} }當然可以為Bean指定名字,通過在標簽中添加id字符串即可。
@Component("myLogin")@Autowired:
該注解會根據依賴關系自動將Bean裝配到相應的地方。
public class test(){@AutowiredLogin login;//其他操作 }總結:
只需要使用上面的四個注解,就可以實現Spring自動裝配Bean。一般情況下盡可能使用自動裝配的方法,因為在項目中顯式的配置越少越好。
Java 代碼中顯式配置Bean:
使用到的注解:@Bean
@Bean:
簡單聲明Bean:
注意,該注解標記在方法上,告訴Spring該方法將返回一個對象,該對象要注冊為Spring應用上下文中的Bean。方法體包含最終產生bean實例的邏輯。
//這里不需要@ComponentScan注解,因為不是自動裝配 @Configuration public class SpringConfig{//這里手動配置LoginImpl的Bean@Beanpublic Login loginImpl(){return new LoginImpl();} }默認情況下返回的Bean的id與帶有@Bean注解的方法名是一樣的,上面的例子Bean的id就是 “loginImpl"。如果想設置其他id,可以重命名這個方法名即可;另一種方法就是在@Bean中指定名字:
@Bean("loginImpl2")實現注入:
上面的例子很簡單,但如果一個Bean依賴與其他對象應該如何寫?比如LoginImpl依賴Identity對象。
第一種方法:
如果Identity也像loginImpl()方法一樣有一個方法identityImpl()聲明了Bean,那么下面這種方法可以將Identity對象裝配到LoginImpl中。
@Bean public Login loginImpl(){return new LoginImpl(identityImpl());第二種方法:
@Bean public Login loginImpl(Identity identity){return new LoginImpl(identity); }這種方法是最佳的選擇,因為該方法不要求Identity在配置類中有顯式聲明Bean的方法,Identity可以是通過自動掃描或者XML文件配置出來的Bean。當Spring調用loginImpl創建loginImpl的bean時,會自動裝配一個Identity Bean進來,不管這個Identity Bean是自動裝配來的還是java或者XML顯式配置來的。
注意:默認情況下Spring中的Bean都是單例模式,也就是說兩個IoginImpl bean會得到相同的LoginImpl實例。
總結:
在必須顯示配置Bean的時候,優先選擇JavaConfig配置。因為Java配置Bean的類型安全檢查更加強大。
XML配置文件配置Bean:
通過XML文件裝配Bean有點麻煩,可以看一看這篇資料 ----https://www.jb51.net/article/126458.htm。
轉載于:https://my.oschina.net/HuoQibin/blog/2223118
總結
以上是生活随笔為你收集整理的Spring Bean的装配(非XML文件方式)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PostgreSQL 10.1 手册_部
- 下一篇: P2424 约数和