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/
本文已獨家授權給腳本之家(jb51net)公眾號獨家發布
