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

泰斗賢若如發表於2019-08-06

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

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

 

 

相關文章