1. 程式人生 > 其它 >基於該LAMP架構,部署商城系統

基於該LAMP架構,部署商城系統

前言

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

例項

@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>

@Bean VS @Component

  • 兩個註解的結果是相同的,bean都會被新增到Spring上下文中。
  • @Component 標註的是類,允許通過自動掃描發現。@Bean需要在配置類@Configuation中使用。
  • @Component類使用的方法或欄位時不會使用CGLIB增強。而在@Configuration類中使用方法或欄位時則使用CGLIB創造協作物件

假設我們需要將一些第三方的庫元件裝配到應用中或者 我們有一個在多個應用程式中共享的模組,它包含一些服務。並非所有應用都需要它們。

如果在這些服務類上使用@Component並在應用程式中使用元件掃描,我們最終可能會檢測到超過必要的bean。導致應用程式無法啟動
但是我們可以使用 @Bean來載入

因此,基本上,使用@Bean將第三方類新增到上下文中。和@Component,如果它只在你的單個應用程式中



作者:黑曼巴yk
連結:https://www.jianshu.com/p/21f3e074e91a
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。