@Configuration使用


前言

@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
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM