詳細(xì)易懂帶你了解Spring中的注解
Spring注解
Spring的一個(gè)核心是IOC,是將Bean初始化加載到容器中,Bean是如何加載到容器的,可以使用Spring注解方式或者Spring XML配置方式。
Spring注解方式減少了配置文件內(nèi)容,更加便于管理,并且使用注解可以大大提高了開發(fā)效率!
注解本身是沒有功能的,和xml一樣,注解和xml都是一種元數(shù)據(jù),元數(shù)據(jù)即解釋數(shù)據(jù)的數(shù)據(jù),也就是所謂的配置。
聲明bean的注解
- @Component: 普通的注解
- @Service :業(yè)務(wù)邏輯層以及Service層
- @Controller: 外部層
- @Repository :dao層即持久層
注:@Controller、@Service、@Repository都可以稱為@Component
注入bean的注解
@Autowired (根據(jù)屬性類型自動(dòng)裝配)
當(dāng)在將一個(gè)類上標(biāo)注@Service或者@Controller或@Component或@Repository注解之后,spring的組件掃描就會(huì)自動(dòng)發(fā)現(xiàn)它,并且會(huì)將其初始化為spring應(yīng)用上下文中的bean。
當(dāng)需要使用這個(gè)bean的時(shí)候,加上==@Autowired==注解的時(shí)候,這個(gè)bean就會(huì)被創(chuàng)建。而且初始化是根據(jù)無參構(gòu)造函數(shù)。
- @Autowired可以標(biāo)注在屬性上、方法上和構(gòu)造器上,來完成自動(dòng)裝配。
- 默認(rèn)是根據(jù)屬性類型,spring自動(dòng)將匹配到的屬性值進(jìn)行注入
當(dāng)@Autowired標(biāo)注的屬性是接口時(shí),其實(shí)注入的是這個(gè)接口的實(shí)現(xiàn)類, 如果這個(gè)接口有多個(gè)實(shí)現(xiàn)類,只使用@Autowired就會(huì)報(bào)錯(cuò),因?yàn)樗J(rèn)是根據(jù)類型找,然后就會(huì)找到多個(gè)實(shí)現(xiàn)類bean,所有就不知道要注入哪個(gè)。然后它就會(huì)根據(jù)屬性名去找。所以如果有多個(gè)實(shí)現(xiàn)類可以配合@Qualifier(value=“類名”)來使用
@Autowired private UserServiceImpl userService; @GetMapping("{id}") public Result<List<OrderDTO>> selectById(@PathVariable Integer id) { List<OrderDTO> list = userService.selectById(id); return Result.ok(list); }
@Resource (可以根據(jù)類型注入,也可以根據(jù)名稱注入)
@Resource有兩個(gè)重要屬性,分別是name和type
spring將name屬性解析為bean的名字,而type屬性則被解析為bean的類型。
所以如果使用name屬性,則使用byName的自動(dòng)注入策略,如果使用type屬性則使用byType的自動(dòng)注入策略。
如果都沒有指定,則通過反射機(jī)制使用byName自動(dòng)注入策略。
@Resource(name="gender") private String gender; @Resource(name="age") private String age;
<bean name="gender" class="java.lang.String"> <constructor-arg value="${oos.gender}"/> </bean> <bean name="age" class="java.lang.String"> <constructor-arg value="${oos.age}"/> </bean>
@Resource和@Autowired注解都是實(shí)現(xiàn)依賴注入的。
只是@AutoWried按by type自動(dòng)注入,而@Resource默認(rèn)按byName自動(dòng)注入。
@Qualifier (根據(jù)屬性名稱進(jìn)行注入)
@Qualifier的使用要和上面的@Autowired一起使用,讓系統(tǒng)知道了我們具體要引入哪個(gè)實(shí)現(xiàn)類,當(dāng)有多個(gè)實(shí)現(xiàn)類的時(shí)候,我們可以使用此方法
@Autowired @Qualifier(value = "userDaoImpl") private UserDao userDao;
@Value 注入普通類型的注入
通過@Value注解指定系統(tǒng)屬性的名稱susan.test.userName,該名稱需要使用${}包起來。
@Value注解中指定的系統(tǒng)屬性名,必須跟配置文件中的相同。
@Service public class UserService { @Value("${test.userName}") private String userName; public String test() { System.out.println(userName); return userName; } }
而配置文件中配置的系統(tǒng)屬性名是:
test.user-name=張三
最后獲取數(shù)據(jù)時(shí),會(huì)發(fā)現(xiàn)userName竟然可能會(huì)出現(xiàn)亂碼:
手動(dòng)將ISO-8859-1格式的屬性值,轉(zhuǎn)換成UTF-8格式。
到此這篇關(guān)于詳細(xì)易懂帶你了解Spring中的注解的文章就介紹到這了,更多相關(guān)Spring中的注解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Security跳轉(zhuǎn)頁面失敗問題解決
這篇文章主要介紹了Spring Security跳轉(zhuǎn)頁面失敗問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01Springboot傳輸數(shù)據(jù)時(shí)日期格式化問題
這篇文章主要介紹了Springboot傳輸數(shù)據(jù)時(shí)日期格式化問題,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-09-09Springboot mybatisplus如何解決分頁組件IPage失效問題
這篇文章主要介紹了Springboot mybatisplus如何解決分頁組件IPage失效問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08Java找出兩個(gè)大數(shù)據(jù)量List集合中的不同元素的方法總結(jié)
本文將帶大家了解如何快速的找出兩個(gè)相似度非常高的List集合里的不同元素。主要通過Java API、List集合雙層遍歷比較不同、借助Map集合查找三種方式,需要的可以參考一下2022-10-10