什麼是註解?java
(1)代碼裏特殊的標記,格式:@註解名稱(屬性名稱=屬性值..)spring
(2)能夠在類、方法、屬性上添加註解。express
使用註解的目的?測試
能夠簡化xml配置,使程序變得更簡潔、優雅.net
註解的運用code
建立對象提供的註解包含如下4個:component
- @Componet
- @Service
- @Controller
- @Repository
特色:上面四個註解的功能都是同樣的,均可以用來建立bean實例,建議使用在對應的功能層次中xml
註解 | 含義 |
---|---|
@Component | 最普通的組件,能夠被注入到spring容器進行管理 |
@Repository | 做用於持久層 |
@Service | 做用於業務邏輯層 |
@Controller | 做用於表現層,Controller類 |
屬性注入提供的註解:對象
- @Autowired
- @Qualifier
- @Resource
- @Value
特色:@Autowired、@Qualifier、@Resource能夠用於注入對象類型屬性,@Value能夠用戶注入普通類型的屬性。開發
註解 | 含義 |
---|---|
@Autowired | 根據屬性類型進行自動裝配 |
@Qualifier | 根據屬性名稱進行注入 |
@Resource | 能夠根據屬性、名稱進行注入 |
@Value | 注入普通類型的屬性 |
基於註解實現建立對象
1)引入依賴
<!-- spring-aop--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>5.2.8.RELEASE</version> </dependency>
2)開啓組件掃描
<?xml version="1.0" encoding="UTF-8"?> <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.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <!--開啓組件掃描 base-package屬性:設置要掃描的包 --> <context:component-scan base-package="org.leanr.spring5"></context:component-scan> </beans>
3)類上添加註解
package org.leanr.spring5.service; import org.springframework.stereotype.Service; /** * 類上增長建立對象的註解 * - @Componet * - @Service * - @Controller * - @Repository * value屬性能夠不設置,默認是類的名稱,首字母小寫, */ @Service(value = "userService") public class UserService { public void add(){ System.out.println("addddddd"); } }
4)編寫測試類
package org.leanr.spring5; import org.junit.Test; import org.leanr.spring5.bean.User; import org.leanr.spring5.service.UserService; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestSpring5 { /** * IOC操做Bean管理-註解方式建立對象 */ @Test public void test() { ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml"); UserService userService = context.getBean("userService", UserService.class); System.out.println(userService); userService.add(); } }
測試類執行結果:
org.leanr.spring5.service.UserService@7920ba90 addddddd
組件掃描配置的細節
<!--use-default-filters屬性表示:是否開啓默認的filter來掃描包下的內容 默認是true,若是設置爲false,則須要設置指定的規則 例以下面設置的意思是,註解是@Controller在org.leanr.spring5包下掃描是生效的,其餘註解類不會被掃描到 --> <context:component-scan base-package="org.leanr.spring5" use-default-filters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan> </beans>
基於註解實現屬性的注入
第一步註解方式建立對象
第二步在類中注入外部屬性,並添加屬性的註解
1)@Autowired
@Service(value = "userService") public class UserService { //注入屬性的註解@Autowired,根據屬性類型自動裝入 @Autowired private UserDao userDao; public void add(){ System.out.println("userService add"); userDao.add(); }
2)@Qualifier
根據屬性名稱進行注入
/** * UserDao的實現類 */ @Repository(value = "userDaoImpl2") public class UserDaoImpl implements UserDao { public int add() { System.out.println("UserDaoImpl add "); return 1; } }
@Service(value = "userService") public class UserService { //注入屬性的註解@Autowired,根據屬性類型自動裝入 @Autowired @Qualifier(value = "userDaoImpl2") private UserDao userDao; public void add(){ System.out.println("userService add"); userDao.add(); }
3)@Resource
既能夠根據類型也能夠名稱注入
@Service(value = "userService") public class UserService { //注入屬性的註解@Autowired,根據屬性類型自動裝入 //@Autowired //@Qualifier(value = "userDaoImpl2") //@Resource //根據類型注入 @Resource(value="userDaoimpl2") //根據名稱註解 private UserDao userDao; public void add(){ System.out.println("userService add"); userDao.add(); }
4)@Value
針對普通類型的屬性注入
@Value(value = "zhangsan") private String userName;
純註解開發
1)建立配置類,替代xml配置文件
package org.leanr.spring5.config; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; //Configuration,讓Spring知道這是個配置類 @Configuration @ComponentScan(basePackages = {"org.leanr.spring5"}) public class SpringConfig { }
2)編寫測試類
/** * 徹底註解開發 */ @Test public void test3(){ AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class); UserService userService = context.getBean("userService", UserService.class); userService.add(); }