【Java高級】註解篇 - @Configureation

  前言
  @Configuration 用於定義配置類,可替換XML配置文件,被註解的類內部包含一個或多個@Bean註解方法。可以被AnnotationConfigApplicationContext或者AnnotationConfigWebApplicationContext 進行掃描。用於構建bean定義以及初始化Spring容器。

  它是在spring3.0版本之後出現的。此註解是spring支持註解驅動開發的一個標誌。表明當前類是spring的一個配置類,作用是替代spring的applicationContext.xml。但其本質就是@Component註解,被此註解修飾的類,也會被存入spring的IOC容器。
  屬性:
  value:用於存入spring的ioc容器中Bean的id
  使用場景:
  在註解驅動開發時,用於縮寫配置的類,通常可以使用此註解。一般情況下,我們的配置也會分爲主次配置,@Configureation一般出現在主配置類上。值得注意的是,如果我們在註解驅動開發時,構建ioc容器使用的是傳入字節碼的構造函數,此註解可以省略,但是如果傳入的是一個包,此註解則不能省略。

  實例

   @Configuration 加載Spring方法

  Car.java

public class Car {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

  定義Config類

@Configuration
public class Config {
    public Config() {
        System.out.println("TestConfig容器初始化...");
    }

    @Bean(name = "getMyCar")
    public Car getCar() {
        Car c = new Car();
        c.setName("dankun");
        return c;
    }
}

  實例化

public void testConfig() {
        ApplicationContext context = new AnnotationConfigApplicationContext(Config.class);
        Car car = (Car)context.getBean("car");
        System.out.println(car.getName());
    }
// 輸出
// TestConfig容器初始化...
// dankun

  @Configuration + @Component

  @Configuration也附帶了@Component的功能。所以理論上也可以使用@Autowared功能。上述代碼可以改成下面形式
  Car.java

@Component
public class Car {
    @Value("dankun")
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

  Config.java

@Configuration
@ComponentScan("com.wuyue.annotation")
public class Config {
    public Config() {
        System.out.println("TestConfig容器初始化...");
    }
}

  測試主入口

public class TestConfig {
    @Test
    public void testConfig() {
        ApplicationContext context = new AnnotationConfigApplicationContext(Config.class);
        Car car = (Car)context.getBean("car");
        System.out.println(car.getName());
    }
}
// 輸出
// TestConfig容器初始化...
// dankun

  總結

  • @Configuation等價於<Beans></Beans>
  • @Bean 等價於<Bean></Bean>
  • @ComponentScan等價於<context:component-scan base-package="com.dxz.demo"/>
  • @Component 等價於<Bean></Bean>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章