1、javax與java庫的區(qū)別
?javax是擴(kuò)展的庫驮吱,如j2ee等;
java庫提供的是基本的類树埠,如Map collection list等io庫糠馆,桌面類庫,是屬于jdk的怎憋,即java develop kit又碌;
2、javax.annotation.Resource作用绊袋?
是作為bean的注入使用毕匀!什么是注入使用?稍后解答癌别!
都可以作用到字段和setting方法上皂岔;
@Resource有兩個(gè)重要的屬性,name和type;而Spring將name屬性做為解析的bean的名稱展姐,而type作為解析的bean的類型躁垛;如果使用name則使用byName注入策略;如果使用type圾笨,則使用byType注入策略教馆;如果都沒有使用,則默認(rèn)使用反射機(jī)制擂达,使用byName的注入策略土铺;
注入策略:目前的理解是sping自動(dòng)實(shí)例化一個(gè)對(duì)象,而不用在代碼中new一個(gè)對(duì)象板鬓;
網(wǎng)上解釋:假如A組件調(diào)用了B組件的方法悲敷,我們就可以稱A組件依賴于B組件。我們通過使用依賴注入俭令,Java EE應(yīng)用中的各種組件不需要以硬編碼方式耦合在一起后德,甚至無需使用工廠模式。當(dāng)某個(gè)Java實(shí)例需要其他Java實(shí)例時(shí)抄腔,系統(tǒng)自動(dòng)提供所需要的實(shí)例探遵,無需程序顯示獲取,這種自動(dòng)提供java實(shí)例我們謂之為依賴注入妓柜,也可以稱之為控制反轉(zhuǎn)(Inversion of Control IoC)
3箱季、@Repository @Service @Controller @Component的使用?
剛開始以為是hibernate的注解棍掐,后來研究發(fā)現(xiàn)是springmvc的控制分層藏雏;他們分別對(duì)應(yīng)數(shù)據(jù)寫入層、服務(wù)層、控制層掘殴,而@Component則是用于不太好歸類的類赚瘦;
原理是通過xml配置的掃描路徑:尋找到該路徑下的這些注解類,并將他們納入到spring容器進(jìn)行管理奏寨;
@Service public class VentorServiceImpl implements iVentorService{}
@Repository public class VentorDaoImpl implements iVentorDao {}
getBean的默認(rèn)名稱是類名(頭字母小寫)起意,如果想自定義,可以@Service(“aaaaa”)這樣來指定病瞳,這種bean默認(rèn)是單例的揽咕,如果想改變,可以使用@Service(“beanName”)@Scope(“prototype”)來改變套菜∏咨疲可以使用以下方式指定初始化方法和銷毀方法(方法名任意)
@PostConstruct public void init() { }
@PreDestroy public void destory() {?}
注意:這個(gè)注入放置的位置,entityBehaviorImpl類注入到serviceImpl類中逗柴,而service接口注入到action中蛹头?為什么?
注入方式:
把DAO實(shí)現(xiàn)類注入到service實(shí)現(xiàn)類中戏溺,把service的接口(注意不要是service的實(shí)現(xiàn)類)注入到action中渣蜗,注入時(shí)不要new 這個(gè)注入的類,因?yàn)閟pring會(huì)自動(dòng)注入旷祸,如果手動(dòng)再new的話會(huì)出現(xiàn)錯(cuò)誤耕拷,然后屬性加上@Autowired后不需要getter()和setter()方法,Spring也會(huì)自動(dòng)注入肋僧。至于更具體的內(nèi)容斑胜,等對(duì)注入的方式更加熟練后會(huì)做個(gè)完整的例子上來控淡。
注解在spring的配置文件里面只需要加上和嫌吠,可以使用base-package="*"表示全部的類。
< context:component-scan base-package=”com.eric.spring”>
其中base-package為需要掃描的包(含所有子包)
在接口前面標(biāo)上@Autowired和@Qualifier注釋使得接口可以被容器注入掺炭,當(dāng)接口存在兩個(gè)實(shí)現(xiàn)類的時(shí)候必須指定其中一個(gè)來注入辫诅,使用實(shí)現(xiàn)類首字母小寫的字符串來注入,如:
@Autowired
@Qualifier("chinese")
private Man man;
否則可以省略涧狮,只寫@Autowired ?炕矮。
4、過濾使用正則regex和aspectJ
1. 掃描過濾方式
過濾器類型?說明
注釋?假如?com.baobaotao.SomeAnnotation?是一個(gè)注釋類者冤,我們可以將使用該注釋的類過濾出來肤视。
類名指定?通過全限定類名進(jìn)行過濾,如您可以指定將?com.baobaotao.Boss?納入掃描涉枫,而將?com.baobaotao.Car?排除在外邢滑。
正則表達(dá)式?通過正則表達(dá)式定義過濾的類,如下所示:?com\.baobaotao\.Default.*
AspectJ?表達(dá)式?通過?AspectJ?表達(dá)式定義過濾的類愿汰,如下所示:?com.?baobaotao..*Service+
下面是一個(gè)簡(jiǎn)單的例子:
expression="com\.baobaotao\.service\..*"/>
expression="com.baobaotao.util..*"/>
值得注意的是??配置項(xiàng)不但啟用了對(duì)類包進(jìn)行掃描以實(shí)施注釋驅(qū)動(dòng)?Bean?定義的功能困后,同時(shí)還啟用了注釋驅(qū)動(dòng)自動(dòng)注入的功能(即還隱式地在內(nèi)部注冊(cè)了?AutowiredAnnotationBeanPostProcessor?和?CommonAnnotationBeanPostProcessor)乐纸,因此當(dāng)使用??后,就可以將??移除了摇予。
默認(rèn)情況下通過@Component定義的?Bean?都是?singleton?的汽绢,如果需要使用其它作用范圍的?Bean,可以通過@Scope注釋來達(dá)到目標(biāo)侧戴,如以下代碼所示:
24.?通過@Scope指定?Bean?的作用范圍
packagecom.baobaotao;
importorg.springframework.context.annotation.Scope;
…
@Scope("prototype")
@Component("boss")
publicclassBoss?{
…
}
expression="com\.baobaotao\.service\..*"/>
expression="com.baobaotao.util..*"/>