? ? ? 本次本家兒要介紹Spring注解。
? ? ? 注解分為兩類:
? ? ? ? 1、一類是利用Bean,便是把已經在xml文件中設置裝備擺設好的Bean拿來用,完當作屬性、方式的組裝;好比@Autowired , @Resource,可以經由過程byTYPE(@Autowired)、byNAME(@Resource)的體例獲取Bean;
? ? ? ??2、一類是注冊Bean,@Component , @Repository , @ Controller ,@Service , @Configration這些注解都是把您要實例化的對象轉化當作一個Bean,放在IoC容器中,等您要用的時辰,它會和上面的@Autowired , @Resource共同到一路,把對象、屬性、方式完美組裝。
@Autowired或者(? @Autowired(required=false))
Spring 2.5 引入了 @Autowired 注釋,它可以對類當作員變量、方式及機關函數進行標注,完當作主動裝配的工作。?經由過程 @Autowired的利用來消弭 set ,get方式。
若是我們想利用名稱裝配可以連系@Qualifier注解進行利用,如下:
@Autowired() @Qualifier("baseDao") ? ??
?private BaseDao baseDao; ?
1、required屬性
? required屬性值可覺得true( 默認值)和false。若是為true的話,沒有匹配的類則拋出異常;若是為false,則暗示不是強制必需可以或許找到響應的類,無論是否注入當作功,都不會拋錯。
2、工作道理
?注解解析器:AutowiredAnnotationBeanPostProcessor
2.1、Spring容器啟動時,AutowiredAnnotationBeanPostProcessor被注冊到容器;
2.2、掃描代碼,若是帶有@Autowired注解,則將依靠注入信息封裝到InjectionMetadata中(見掃描過程);
2.3、建立bean時(實例化對象和初始化),會挪用各類BeanPostProcessor對bean初始化,AutowiredAnnotationBeanPostProcessor負責將相關的依靠注入進來;
3、@Autowired掃描過程
掃描當前類中標注@Autowired的屬性和方式;
再查找父類中注@Autowired的屬性和方式,依次遍歷;
詳解在分歧場景利用的體例:https://blog.csdn.net/horacehe16/article/details/79811763
@Resource(這個注解屬于J2EE的)
1、默認安照名稱進行裝配,名稱可以經由過程name屬性進行指定, 若是沒有指定name屬性,當注解寫在字段上時,默認取字段名進行按照名稱查找,若是注解寫在setter方式上默認取屬性名進行裝配。 當找不到與名稱匹配的bean時才按照類型進行裝配。可是需要注重的是,若是name屬性一旦指定,就只會按照名稱進行裝配。
?Java代碼 ?
?@Resource(name="baseDao") ? ??
?private BaseDao baseDao; ? ??
2、 保舉利用:@Resource注解在字段上,且這個注解是屬于J2EE的,削減了與spring的耦合。最主要的這樣代碼看起就比力優雅。
3. 只指定@Resource注解的type屬性,則從上下文中找到類型匹配的獨一bean進行裝配,找不到或者找到多個,城市拋出異常
4. 既指定了@Resource的name屬性又指定了type,則從Spring上下文中找到獨一匹配的bean進行裝配,找不到則拋出異常
0 篇文章
如果覺得我的文章對您有用,請隨意打賞。你的支持將鼓勵我繼續創作!