Spring基於註解的IoC配置

一、概述

1、註解配置與 xml 配置

  • Spring基於註解的IoC配置 與 xml 配置要實現的功能都是一樣的,只是配置的形式不一樣
  • 都是要降低程序間的耦合

2、使用註解的步驟:

  1. 添加context的名稱控件和約束
  2. 開啓註解掃描:由spring掃描指定的包及其子包下的所有類,如果類上使用了@Component註解,就將該類裝配到容器中
  3. 在類上使用@Component註解

3、注意:

  1. 當我們使用註解注入時,set 方法不用寫
  2. 使用註解之前一定要先在配置文件(applicationContext.xml)中開啓註解掃描,也就是基於註解整合時,導入約束時需要多導入一個 context 名稱空間下的約束。
<!-- 告知spring創建容器時要掃描的包 -->
<context:component-scan base-package="cn.lemon"></context:component-scan>

二、註解配置IOC

1、常用的註解

在這裏插入圖片描述

2、Spring 註解和 XML 的選擇問題

  • 註解的優勢: 配置簡單,維護方便(我們找到類,就相當於找到了對應的配置)。
  • XML 的優勢: 修改時,不用改源碼。不涉及重新編譯和部署。

在這裏插入圖片描述

三、Spring純註解配置IOC

1、@Configuration

  • 作用:
    用於指定當前類是一個 spring 配置類,當創建容器時會從該類上加載註解。獲取容器時需要使用AnnotationApplicationContext(有@Configuration 註解的類.class)。
  • 屬性:
    value : 用於指定配置類的字節碼
  • 注意:
    我們已經把配置文件用類來代替了,但是如何配置創建容器時要掃描的包呢?
    請看下一個註解。

2、@ComponentScan

  • 作用 :
    用於指定 spring 在初始化容器時要掃描的包。作用和在 spring 的 xml 配置文件中的:<context:component-scan base-package="com.lxs"/>是一樣的。

  • 屬性:
    basePackages:用於指定要掃描的包。和該註解中的 value 屬性作用一樣。

  • 注意:
    我們已經配置好了要掃描的包,但是數據源和 JdbcTemplate 對象如何從配置文件中移除呢?
    請看下一個註解。

3、@Bean

  • 作用:
    該註解只能寫在方法上,表明使用此方法創建一個對象,並且放入 spring 容器。

  • 屬性:
    name:給當前@Bean 註解方法創建的對象指定一個名稱(即 bean 的 id)。

  • 注意:
    我們已經把數據源和 DBAssit 從配置文件中移除了,此時可以刪除 bean.xml 了。但是由於沒有了配置文件,創建數據源的配置又都寫死在類中了。如何把它們配置出來呢?
    請看下一個註解

4、@PropertySource

  • 作用:
    用於加載.properties 文件中的配置。例如我們配置數據源時,可以把連接數據庫的信息寫到properties 配置文件中,就可以使用此註解指定 properties 配置文件的位置。

  • 屬性:
    value[]:用於指定 properties 文件位置。如果是在類路徑下,需要寫上 classpath

  • 注意:
    此時我們已經有了兩個配置類,但是他們還沒有關係。如何建立他們的關係呢?
    請看下一個註解。

5、@Import

  • 作用:
    用於導入其他配置類,在引入其他配置類時,可以不用再寫@Configuration 註解。當然,寫上也沒問
    題。

  • 屬性:
    value[]:用於指定其他配置類的字節碼。

  • 注意:
    我們已經把要配置的都配置好了,但是新的問題產生了,由於沒有配置文件了,如何獲取容器呢?

6、通過註解獲取容

ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfiguration.class);

四、Spring整合Junit

第一步:導包

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.1.5.RELEASE</version>
            <scope>test</scope>
        </dependency>

第二步:使用@RunWith 註解替換原有運行器

@RunWith(SpringJUnit4ClassRunner.class)

第三步:使用@ContextConfiguration 指定 spring 配置文件的位置

@ContextConfiguration(locations= {"classpath:applicationContest.xml"})

@ContextConfiguration 註解:

  • locations 屬性:用於指定配置文件的位置。如果是類路徑下,需要用 classpath:表明
  • classes 屬性:用於指定註解的類。當不使用 xml 配置時,需要用此屬性指定註解類的位置。

第四步:使用@Autowired 給測試類中的變量注入數據

    @Autowired
    private IAccountService ac;

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章