詳細易懂帶你了解Spring中的注解
Spring注解
Spring的一個核心是IOC,是將Bean初始化加載到容器中,Bean是如何加載到容器的,可以使用Spring注解方式或者Spring XML配置方式。
Spring注解方式減少了配置文件內容,更加便于管理,并且使用注解可以大大提高了開發(fā)效率!
注解本身是沒有功能的,和xml一樣,注解和xml都是一種元數據,元數據即解釋數據的數據,也就是所謂的配置。
聲明bean的注解
- @Component: 普通的注解
- @Service :業(yè)務邏輯層以及Service層
- @Controller: 外部層
- @Repository :dao層即持久層
注:@Controller、@Service、@Repository都可以稱為@Component
注入bean的注解
@Autowired (根據屬性類型自動裝配)
當在將一個類上標注@Service或者@Controller或@Component或@Repository注解之后,spring的組件掃描就會自動發(fā)現它,并且會將其初始化為spring應用上下文中的bean。
當需要使用這個bean的時候,加上==@Autowired==注解的時候,這個bean就會被創(chuàng)建。而且初始化是根據無參構造函數。
- @Autowired可以標注在屬性上、方法上和構造器上,來完成自動裝配。
- 默認是根據屬性類型,spring自動將匹配到的屬性值進行注入
當@Autowired標注的屬性是接口時,其實注入的是這個接口的實現類, 如果這個接口有多個實現類,只使用@Autowired就會報錯,因為它默認是根據類型找,然后就會找到多個實現類bean,所有就不知道要注入哪個。然后它就會根據屬性名去找。所以如果有多個實現類可以配合@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 (可以根據類型注入,也可以根據名稱注入)
@Resource有兩個重要屬性,分別是name和type
spring將name屬性解析為bean的名字,而type屬性則被解析為bean的類型。
所以如果使用name屬性,則使用byName的自動注入策略,如果使用type屬性則使用byType的自動注入策略。
如果都沒有指定,則通過反射機制使用byName自動注入策略。
@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注解都是實現依賴注入的。
只是@AutoWried按by type自動注入,而@Resource默認按byName自動注入。
@Qualifier (根據屬性名稱進行注入)
@Qualifier的使用要和上面的@Autowired一起使用,讓系統(tǒng)知道了我們具體要引入哪個實現類,當有多個實現類的時候,我們可以使用此方法
@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=張三
最后獲取數據時,會發(fā)現userName竟然可能會出現亂碼:
手動將ISO-8859-1格式的屬性值,轉換成UTF-8格式。
到此這篇關于詳細易懂帶你了解Spring中的注解的文章就介紹到這了,更多相關Spring中的注解內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Springboot mybatisplus如何解決分頁組件IPage失效問題
這篇文章主要介紹了Springboot mybatisplus如何解決分頁組件IPage失效問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08