Spring註解淺入淺出——不吹牛逼不裝逼
前情提要
上文書我們們說了《Spring淺入淺出》,對Spring的核心思想看過上篇的朋友應該已經掌握了,此篇用上篇鋪墊,引入註解,繼續深入學習。
引入註解
在Spring框架中,儘管使用XML配置檔案可以很簡單地裝配Bean,但如果應用中有大量的Bean需要裝配,會導致XML配置檔案過於龐大,不方便以後的升級與維護,因此,推薦開發者使用註解的方式去裝配Bean。
註解詳解
對註解不清楚的可以看我部落格《註解》 ,其實註解就是一個類,在開發中使用註解取代XML配置檔案。
1. @Component 取代 <bean class=""></bean>
@Component("id的值")
2. web開發中,提供3個@Component註解衍生註解(功能一樣)取代 <bean class=""></bean>
@Repository :dao層
@Service :service層
@Controller :web層
注意:SpringMVC 中推薦使用註解哦!
3. 依賴注入,給私有欄位設定,也可以給setter方法設定
普通值:@Value("")
引用值:
方式1:按照【型別】注入
@Autowired
方式2:按照【型別+名稱】注入1
@Autowired
@Qualifier("名稱")
方式3:按照【名稱】注入2
@Resource("名稱")
4. 生命週期
@PostConstruct :初始化
@PreDestroy :銷燬
5. 作用域
@Scope("prototype") 多例
配置註解
使用註解有了Bean的實現類,但現在Spring容器並不知道去哪裡掃描Bean物件,需要在配置檔案中配置註解。
<?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" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd "> <!—使用context名稱空間,通過Spring掃描指定包annotation及子包下所有Bean的實現類,進行註釋解析--> <context:component-scan base-package="com.my"></context:component-scan> </beans>
案例實踐
一、Pom.xml
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency> <!--spring核心依賴--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>5.1.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.1.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>5.1.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.1.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>5.1.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.1.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>5.1.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>5.1.5.RELEASE</version> </dependency> </dependencies>
二、spring-config.xml
<?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" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd "> <!--配置註解要掃描的包--> <context:component-scan base-package="com.my"></context:component-scan> </beans>
三、UserDao
package com.my.dao; public interface UserDao { public void add(); public void delete(); public void update(); public void query(); }
四、UserDaoImpl
package com.my.dao.impl; import com.my.dao.UserDao; import org.springframework.stereotype.Repository; @Repository public class UserDaoImpl implements UserDao { @Override public void add() { System.out.println("UserDao中的新增功能實現了"); } @Override public void delete() { System.out.println("UserDao中的刪除功能實現了"); } @Override public void update() { System.out.println("UserDao中的修改功能實現了"); } @Override public void query() { System.out.println("UserDao中的查詢功能實現了"); } }
五、UserService
package com.my.service; public interface UserService { public void add(); public void delete(); public void update(); public void query(); }
六、UserServiceImpl
package com.my.service.impl; import com.my.dao.UserDao; import com.my.dao.impl.UserDaoImpl; import com.my.service.UserService; import org.springframework.stereotype.Service; @Service public class UserServiceImpl implements UserService { private UserDao userDao = new UserDaoImpl(); @Override public void add() { userDao.add(); } @Override public void delete() { userDao.delete(); } @Override public void update() { userDao.update(); } @Override public void query() { userDao.query(); } }
七、UserController
package com.my.controller; import com.my.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.stereotype.Controller; import org.springframework.stereotype.Service; @Controller public class UserController { @Autowired private UserService userService; public void add(){ userService.add(); } public void delete(){ userService.delete(); } public void update(){ userService.update(); } public void query(){ userService.query(); } }
八、測試Test2
package com.my.test; import com.my.controller.UserController; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Test2 { public static void main(String[] args) { ApplicationContext appCon = new ClassPathXmlApplicationContext("spring-config.xml"); UserController userController = (UserController) appCon.getBean("userController"); userController.add(); userController.delete(); userController.update(); userController.query(); } }
九、測試結果
結束總結
看完此篇及上篇的朋友應該掌握Bean的兩種常用裝配方式,即基於XML配置的裝配和基於註解的裝配,其中此篇基於註解的裝配方式尤其重要,它是當前的主流裝配方式。
*****************************************************************************************************
我的部落格園地址:https://www.cnblogs.com/zyx110/
轉載請說明出處
我不能保證我所說的都是對的,但我能保證每一篇都是用心去寫的,我始終認同“分享的越多,你的價值增值越大”,歡迎大家關注我的技術分享“Java匹馬行天下”和學習心得分享“匹馬行天下”,在分享中進步,越努力越幸運,人生贏在轉折處,改變從現在開始!
支援我的朋友們記得點波推薦哦,您的肯定就是我前進的動力。