Spring註解淺入淺出——不吹牛逼不裝逼

  • 2019 年 10 月 3 日
  • 筆記

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匹馬行天下”和學習心得分享“匹馬行天下”,在分享中進步,越努力越幸運,人生贏在轉折處,改變從現在開始!

支援我的朋友們記得點波推薦哦,您的肯定就是我前進的動力。