spring bean管理的註解
@Component是一個通用的註解,可用於任何bean
@Repository,@Service,@Controller是更有針對性的註解
@Repository:通常用於註解DAO類,即持久層
@Service:通常用於註解Service類,即服務層
@Controller:通常用於Controller類,機控制層(MVC)
元註解
許多Spring提供的註解,可以作為自己的程式碼,即"元資料註解",元註解是一個簡單的註解,可以應用到另一個註解比如component,在使用元註解的時候除了value()外,元註解還可以允許有其他屬性可以定製
- 類的自動檢測與註冊Bean
Spring可以自動檢測所有類,並註冊相應的Bean到ApplicationContext(IOC容器)中,
為了讓spring能夠檢測到這些類並註冊相應的Bean,需要下面的內容。
紅線部分表示掃描定義的包下的所有類,並將其註冊到IOC容器中。
如何使用過濾器進行自定義的掃描:
1、預設情況下, 類被自動發現並註冊bean的條件是:使用@Component,@Repository,@Service,@Controller註解或者使用@Component的自定義註解。
2、可以通過過濾器修改上面的行為,如:下面的例子的XML配置忽略所有的@Repository註解並用”Stub“代替
3、還可以使用use-default-filters=”false “禁用自動發現與註冊
- <context:annotation-config/>
基於XML的SPring配置的標籤 ,(包含上下文名稱空間)
<context:annotation-config/>僅會查詢在同一個applicationContext中的Bean註解
定義bean:
1、掃描過程中元件被自動檢測,那麼bean名稱是用BeanNameGenerator生成的(通常是類的名字的首字母小寫) ,@Component,@Repository,@Service,@Controller都會有個name屬性用於顯示的設定BeanName
例子:
@Service("mySpringTest")這樣在bean中的id就會是自己定義的名字,如果不寫("mySpringTest")就會預設的類名的首字母小寫。
2、這個自動命名可以自動修改規則(可以改成類名全體大寫),實現的方法是BeanNameGenerator介面,並一定要包含的無參構造器,
覆蓋好方法後要使用它需要在XML中引用該覆蓋類。使用方法:
<bean>
<context:compontent-scan base-package="org.test" name-generator="org.example.自定義的命名類名"/>
</bean>
- @Component,@Repository,@Service,@Controller
- @Required
- @Autowired
1、可以將Autowired註解為"傳統"的setter方法(可以註解到set方法上)
2、可用於構造器或者成員變數(可以註解到構造器或者成員變數上)
3、可以使用Autowired註解那些眾所周知的解析依賴性介面
比如:BeanFactory,ApplicationContext,Environment,ResourceLoader,ApplicationEventPublisher,andMessageSource
- @Qualifier
當按型別自動裝配時可能有多個Bean例項的情況下,可以使用Qualifier註解來縮小範圍(或者指定唯一),也可以用於指定單獨的構造器引數或者方法引數
例子1:用於成員變數
指定bean的id為main的bean進行自動注入
例子2:用於方法中
在xml中實現Qualifier
定義自己的qualifier註解並使用:
- @Resourse