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

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

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

Spring自学教程-注解的使用(三)

發(fā)布時(shí)間:2023/12/20 javascript 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring自学教程-注解的使用(三) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、java中的注解

定義注解

下面是一個(gè)定義注解的實(shí)例。

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface Description {
?String value();
}

其中的@interface是一個(gè)關(guān)鍵字,在設(shè)計(jì)annotations的時(shí)候必須把一個(gè)類(lèi)型定義為@interface,而不能用class或interface關(guān)鍵字。所有的注解類(lèi)都隱式繼承于java.lang.annotation.Annotation,注解不允許顯式繼承于其他的接口。

一個(gè)注解可以擁有多個(gè)成員,成員聲明和接口方法聲明類(lèi)似,這里,我們僅定義了一個(gè)成員,成員的聲明有以下幾點(diǎn)限制:

a)?? 成員以無(wú)入?yún)o(wú)拋出異常的方式聲明,如boolean value(String str)、boolean value() throws Exception等方式是非法的;

b)?? 可以通過(guò)default為成員指定一個(gè)默認(rèn)值,如String level() default "LOW_LEVEL"、int high() default 2是合法的,當(dāng)然也可以不指定默認(rèn)值;

c)?? 成員類(lèi)型是受限的,合法的類(lèi)型包括原始類(lèi)型及其封裝類(lèi)、String、Class、enums、注解類(lèi)型,以及上述類(lèi)型的數(shù)組類(lèi)型。如ForumService value()、List foo()是非法的。

d)?? 如果注解只有一個(gè)成員,則成員名必須取名為value(),在使用時(shí)可以忽略成員名和賦值號(hào)(=),如@Description("使用注解的實(shí)例")。注解類(lèi)擁有多個(gè)成員時(shí),如果僅對(duì)value成員進(jìn)行賦值則也可不使用賦值號(hào),如果同時(shí)對(duì)多個(gè)成員進(jìn)行賦值,則必須使用賦值號(hào),如@DeclareParents (value = "NaiveWaiter", defaultImpl = SmartSeller.class)。

e)?? 注解類(lèi)可以沒(méi)有成員,沒(méi)有成員的注解稱(chēng)為標(biāo)識(shí)注解,解釋程序以標(biāo)識(shí)注解存在與否進(jìn)行相應(yīng)的處理;

注解定義包含四個(gè)元注解,分別為@Target,@Retention,@Documented,@Inherited。各元注解的作用如下:

1)? @Target

表示該注解用于什么地方,可能的?ElemenetType?參數(shù)包括:

?? ElemenetType.CONSTRUCTOR?構(gòu)造器聲明。

?? ElemenetType.FIELD?域聲明(包括?enum?實(shí)例)。

?? ElemenetType.LOCAL_VARIABLE?局部變量聲明。

?? ElemenetType.METHOD?方法聲明。

?? ElemenetType.PACKAGE?包聲明。

?? ElemenetType.PARAMETER?參數(shù)聲明。

?? ElemenetType.TYPE?類(lèi),接口(包括注解類(lèi)型)或enum聲明。

2)? @Retention

表示在什么級(jí)別保存該注解信息。可選的?RetentionPolicy?參數(shù)包括:

?? RetentionPolicy.SOURCE?注解將被編譯器丟棄。

?? RetentionPolicy.CLASS?注解在class文件中可用,但會(huì)被VM丟棄。

?? RetentionPolicy.RUNTIME?VM將在運(yùn)行期也保留注釋,因此可以通過(guò)反射機(jī)制讀取注解的信息。

舉一個(gè)例子,如@Override里面的Retention設(shè)為SOURCE,編譯成功了就不要這一些檢查的信息,相反,@Deprecated里面的Retention設(shè)為RUNTIME,表示除了在編譯時(shí)會(huì)警告我們使用了哪個(gè)被Deprecated的方法,在執(zhí)行的時(shí)候也可以查出該方法是否被Deprecated。

3)? @Documented

將此注解包含在?javadoc?中

4)? @Inherited

允許子類(lèi)繼承父類(lèi)中的注解

二、spring中注解的使用

1、使用Spring注解來(lái)注入屬性

? ??@Resource默認(rèn)按照名稱(chēng)(name="test")進(jìn)行裝配,名稱(chēng)可以通過(guò)@resource的name屬性設(shè)定,當(dāng)找不到與名稱(chēng)匹配的bean才會(huì)按類(lèi)型裝配
? ??? ??注意:如果沒(méi)有指定name屬性,并且安裝默認(rèn)的名稱(chēng)依然找不到依賴(lài)對(duì)象時(shí),@Resource會(huì)回退到按類(lèi)型裝配。但一旦指定了name屬性,就只能按名稱(chēng)裝配了。那么在類(lèi)中怎樣使用呢?
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
????????xsi:schemaLocation="http://www.springframework.org/schema/beans
????????http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
????????http://www.springframework.org/schema/context
????????http://www.springframework.org/schema/context/spring-context-2.5.xsd"
>
????????<context:annotation-config />
</beans>?在配置文件中加上<context:annotationconfig />將隱式地向Spring容器注冊(cè)AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor、 PersistenceAnnotationBeanPostProcessor以及RequiredAnnotationBeanPostProcessor這4個(gè)BeanPostProcessor注解解析器,這樣的話(huà)我們就不許要在對(duì)象中使用set方法了,更方便開(kāi)發(fā)了。。。有木有

2、使用Spring注解完成Bean的定義

?以上我們介紹了通過(guò)@Autowired或@Resource來(lái)實(shí)現(xiàn)在Bean中自動(dòng)注入的功能,下面我們將介紹如何注解Bean,從而從XML配置文件中完全移除Bean定義的配置。

配置文件<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"?
????xsi:schemaLocation="http://www.springframework.org/schema/beans?
????http://www.springframework.org/schema/beans/spring-beans-2.5.xsd?
????http://www.springframework.org/schema/context?
????http://www.springframework.org/schema/context/spring-context-2.5.xsd"
>?
????<context:component-scan base-package="com.kedacom.ksoa" />?
</beans>??
@Component(不推薦使用)、@Repository、@Service、@Controller
只需要在對(duì)應(yīng)的類(lèi)上加上一個(gè)@Component注解,就將該類(lèi)定義為一個(gè)Bean了:

Java代碼
@Component
public class UserDaoImpl extends HibernateDaoSupport implements UserDao {
????...
}

@Component
public class UserDaoImpl extends HibernateDaoSupport implements UserDao {
????????...
}

使用@Component注解定義的Bean,默認(rèn)的名稱(chēng)(id)是小寫(xiě)開(kāi)頭的非限定類(lèi)名。如這里定義的Bean名稱(chēng)就是userDaoImpl。你也可以指定Bean的名稱(chēng):
@Component("userDao")
@Component是所有受Spring管理組件的通用形式,Spring還提供了更加細(xì)化的注解形式:@Repository、@Service、@Controller,它們分別對(duì)應(yīng)存儲(chǔ)層Bean,業(yè)務(wù)層Bean,和展示層Bean。目前版本(2.5)中,這些注解與@Component的語(yǔ)義是一樣的,完全通用,在Spring以后的版本中可能會(huì)給它們追加更多的語(yǔ)義。所以,我們推薦使用@Repository、@Service、@Controller來(lái)替代@Component。
<context:component-scan />的base-package屬性指定了需要掃描的類(lèi)包,類(lèi)包及其遞歸子包中所有的類(lèi)都會(huì)被處理。
<context:component-scan />還允許定義過(guò)濾器將基包下的某些類(lèi)納入或排除。Spring支持以下4種類(lèi)型的過(guò)濾方式:

過(guò)濾器類(lèi)型 表達(dá)式范例 說(shuō)明
注解 org.example.SomeAnnotation 將所有使用SomeAnnotation注解的類(lèi)過(guò)濾出來(lái)
類(lèi)名指定 org.example.SomeClass 過(guò)濾指定的類(lèi)
正則表達(dá)式 com\.kedacom\.spring\.annotation\.web\..* 通過(guò)正則表達(dá)式過(guò)濾一些類(lèi)
AspectJ表達(dá)式 org.example..*Service+ 通過(guò)AspectJ表達(dá)式過(guò)濾一些類(lèi)

以正則表達(dá)式為例,我列舉一個(gè)應(yīng)用實(shí)例:

Java代碼
<context:component-scan base-package="com.casheen.spring.annotation">?
????<context:exclude-filter type="regex" expression="com\.casheen\.spring\.annotation\.web\..*" />?
</context:component-scan>?

????????<context:component-scan base-package="com.casheen.spring.annotation">
????????????????<context:exclude-filter type="regex" expression="com\.casheen\.spring\.annotation\.web\..*" />
????????</context:component-scan>
值得注意的是<context:component-scan />配置項(xiàng)不但啟用了對(duì)類(lèi)包進(jìn)行掃描以實(shí)施注釋驅(qū)動(dòng)Bean定義的功能,同時(shí)還啟用了注釋驅(qū)動(dòng)自動(dòng)注入的功能(即還隱式地在內(nèi)部注冊(cè)了AutowiredAnnotationBeanPostProcessor和CommonAnnotationBeanPostProcessor),因此當(dāng)使用<context:component-scan />后,就可以將<context:annotation-config />移除了。?

總結(jié):?

?







來(lái)自為知筆記(Wiz)

轉(zhuǎn)載于:https://www.cnblogs.com/wang3680/p/0f4eea023d8eb01b097c732fddba5725.html

總結(jié)

以上是生活随笔為你收集整理的Spring自学教程-注解的使用(三)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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