java注解管理_JavaSpring【四、Bean管理注解实现】
前面講的Bean相關(guān)配置全部是使用xml配置文件或?qū)崿F(xiàn)接口來(lái)實(shí)現(xiàn)的,接下來(lái)將比較常用的用法,使用注解實(shí)現(xiàn)bean的注入和管理
內(nèi)容包括
ClassPath掃描與組件管理
類的自動(dòng)檢測(cè)與注冊(cè)bean
context:annotation-config
@Component、@Repository、@Service、@Controller
@AutoWired、@Required
@Qualifier
@Configuration、@Bean
@ImportResource("")、@Value
@Resource
ClassPath掃描與組件管理
從spring3.0開始可以使用java注解來(lái)定義bean,而非xml,如@Configuration、@Bean、@Import、@DependsOn
@Conponent是一個(gè)通用注解,可用于任何Bean
@Repository DAO層(持久層)注解
@Service Service層(服務(wù)層)注解
@Controller MVC控制層注解
注冊(cè)在類上的注解,可以被spring自動(dòng)檢測(cè)并注冊(cè)到ApplicationContext中,注冊(cè)在成員變量或方法上的注解可以被自動(dòng)裝載
類的自動(dòng)檢測(cè)
1、以下語(yǔ)句需要在springxml中配置,即可使用注解
context:annotation-config
context:component-scan(一般配置此配置,配置檢測(cè)路徑,會(huì)包含annotation-config)
2、使用過(guò)濾器進(jìn)行自定義掃描
默認(rèn)情況下,類被自動(dòng)發(fā)信并注冊(cè)bean的條件是:使用@Component、@Repository、@Service、@Controller注解或使用@Component注解的自定義注解
可使用過(guò)濾器修改掃描規(guī)則,如用某字符替換某注解,context:include-filter、context:exclude-filter、ues-default-filter(禁用自動(dòng)發(fā)現(xiàn)與注冊(cè))
filter類型(type)
annotation 注解
assignable 類
aspectj
regex 正則表達(dá)式
custom
Demo
1、修改xml文件
2、在需要注冊(cè)的類上做注解(這里注解只能自動(dòng)注冊(cè)類,省去了xml配置,但不能自動(dòng)裝載,還是需要通過(guò)ApplicationContext獲取)
service中的dao類,因?yàn)橛袠?gòu)造,可以自動(dòng)裝載,若無(wú)構(gòu)造,需使用autowired
3、測(cè)試運(yùn)行
@AutoWired、@Required——自動(dòng)裝載bean
AutoWired可以注解成員變量,使其自動(dòng)裝載(不用使用構(gòu)造)
當(dāng)裝載List時(shí),會(huì)裝載所有List泛型類型的類,若想使其有序,可使用@Order注解所有泛型類型的實(shí)現(xiàn)類,用1,2,3標(biāo)記
若注解必須找到實(shí)現(xiàn)類,則可使用@Autowired(required = true) 或@Required(set方法注解)
@Qualifier——縮小范圍
定義掃描的實(shí)現(xiàn)類名稱,即使有其他實(shí)現(xiàn)類,也可以只裝配該類
Qualifier——適用于成員變量,構(gòu)造,多參方法
Resource——適用于成員變量,單參setter
@Bean基于Java的容器注解
使用在xml中配置bean標(biāo)簽的方式可以將類注冊(cè)到ioc容器中;使用@Configuration注解+@Bean注解可以實(shí)現(xiàn)同樣的效果
@ImportResource("")、@Value——資源引用
如jdbc的配置引入,可在Configuration文件上引入資源,然后對(duì)成員變量進(jìn)行Value注解,讀取資源文件中的key對(duì)于的值,再使用@Bean注冊(cè)
如@ImportResource("classpath:/com/shane/spring/properties-config.xml")、@Value("${jdbc.url}")、@Value("${jdbc.username}")、@Value("${jdbc.password}")
@Resource、@PostConstruct、@PreDestory
@Resource使用與@Autowired差不多,有以下區(qū)別
1、@Autowired與@Resource都可以用來(lái)裝配bean. 都可以寫在字段上,或?qū)懺趕etter方法上。
2、@Autowired默認(rèn)按類型裝配(這個(gè)注解是屬業(yè)spring的),默認(rèn)情況下必須要求依賴對(duì)象必須存在,如果要允許null 值,可以設(shè)置它的required屬性為false
3、@Resource(這個(gè)注解屬于J2EE的),默認(rèn)安照名稱進(jìn)行裝配,名稱可以通過(guò)name屬性進(jìn)行指定,
如果沒(méi)有指定name屬性,當(dāng)注解寫在字段上時(shí),默認(rèn)取字段名進(jìn)行按照名稱查找,如果注解寫在setter方法上默認(rèn)取屬性名進(jìn)行裝配。 當(dāng)找不到與名稱匹配的bean時(shí)才按照類型進(jìn)行裝配。但是需要注意的是,如果name屬性一旦指定,就只會(huì)按照名稱進(jìn)行裝配
@Inject——需要引入包,等效于Autowired,與@Named配合使用
總結(jié)
以上是生活随笔為你收集整理的java注解管理_JavaSpring【四、Bean管理注解实现】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 模块式开发 java_Java9系列第8
- 下一篇: java二分查找宿舍管理_1、任务:为宿