【Spring】(5)IoC - 基於Java的容器配置

前言

在之前,我們都是使用xml進行Spring的配置。

該篇文章將使用Java註解的方式,實現Spring 的配置。

一、基於Java的容器配置

項目結構:

在這裏插入圖片描述

User 類

public class User {
}

AppConfig 類。註解:@Configuration、@ComponentScan、@Import

/**
 * 註解 @Configuration 相當於:<beans></beans>
 * 解釋:@Configuration 就相當於我們之前定義的beans.xml。
 * 註解 @ComponentScan(basePackages = "com.acme") 相當於:<context:component-scan base-package="com.shengjava"/>
 * 解釋:@ComponentScan 用於掃描
 * 註解 @Import(SubAppConfig.class) 功能相當於:<import resource="beans.xml"/>,不過這裏引入的是.class
 */
@Configuration
@ComponentScan(basePackages = "com.shengjava")
@Import(SubAppConfig.class)
public class AppConfig {

    /**
     * 註解 @Bean 相當於:<bean id="user" class="com.shengjava.pojo.User"></bean>
     * 返回值:相當於bean標籤中的class屬性。
     * 方法名:相當於bean標籤中的id屬性。
     */
    @Bean
    public User user() {
        return new User();
    }

}

SubAppConfig類。註解: @Configuration

/**
 * @Configuration 就相當於我們之前定義的beans.xml。
 */
@Configuration
public class SubAppConfig {

}

AppConfigTest類。

注意:這裏獲取的不是之前用xml配置時的ClassPathXmlApplicationContext了,而是AnnotationConfigApplicationContext。

public class AppConfigTest {
    public static void main(String[] args) {
        // 獲取註解配置容器(注意:這裏獲取的對象不是ClassPathXmlApplicationContext了!而是註解配置容器)
        ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
        // 獲取對象
        User user = context.getBean("user", User.class);
        System.out.println(user);
    }
}

輸出

com.shengjava.pojo.User@3270d194

二、註解總結

1.@Configuration

@Configuration 就類似於我們之前定義的beans.xml。

註解 @Configuration 相當於:。

2.@ComponentScan

@ComponentScan 用於掃描。

例如,註解 @ComponentScan(basePackages = “com.acme”) 相當於如下xml配置:

<context:component-scan base-package="com.shengjava"/>

3.@Import

這個註解用於引入其他的註解配置類。

例如,註解 @Import(SubAppConfig.class) 功能相當於如下xml配置:

<import resource="beans.xml"/>

4.@Bean

註解 @Bean 用於方法上,返回值:相當於bean標籤中的class屬性。方法名:相當於bean標籤中的id屬性。

例如,下面java:

    /**
     * 註解 @Bean 相當於:<bean id="user" class="com.shengjava.pojo.User"></bean>
     * 返回值:相當於bean標籤中的class屬性。
     * 方法名:相當於bean標籤中的id屬性。
     */
    @Bean
    public User user() {
        return new User();
    }

相當於xml配置:

<bean id="user" class="com.shengjava.pojo.User"></bean>

參考自:1.12. Java-based Container Configuration

三、擴展

@Resource、@PostConstruct 、@PreDestroy 這三個註解是JDK 6到8的標準Java庫的一部分。但是,整個javax.annotation 包都與JDK 9中的核心Java模塊分開,並最終在JDK 11中刪除了。如果需要,需要對javax.annotation-api工件進行處理。現在可以通過Maven Central獲得,只需像其他任何庫一樣將其添加到應用程序的類路徑中即可。

上面這段話是說,如果你現在用的是JDK9及以上的JDK,你想使用@Resource註解,那你就要在maven引入如下依賴:

<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>javax.annotation-api</artifactId>
    <version>1.3.2</version>
</dependency>

參考自:1.9.9. Using @PostConstruct and @PreDestroy


相關

我的該分類的其他相關文章,請點擊:【Spring + Spring MVC + MyBatis】文章目錄

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