Spring @Import注解示例

x33g5p2x  于2022-10-06 转载在 Spring  
字(1.7k)|赞(0)|评价(0)|浏览(688)

在这篇文章中,我们将结合实例讨论如何使用Spring @Import注解。

@Import 注解概述

  • @Import注解表示要导入一个或多个@Configuration类。
  • @在导入的@Configuration类中声明的Bean定义应该通过使用@Autowired注入来访问。要么Bean本身可以被自动连接,要么声明Bean的配置类实例可以被自动连接。
  • @Import注解可以在类级别上声明,也可以作为元注解。
    下图显示了@Import注解的一个内部实现。

如果需要导入XML或其他非@Configuration的bean定义资源,请使用@ImportResource注解代替。例如,如果你想加载config.properties文件,那么你可以使用@ImportResource注解来加载各自的属性文件。

在基于Spring XML的配置中,我们使用一个**<import />**元素来加载多个Spring Bean配置文件。 
例如。

  1. <beans xmlns="http://www.springframework.org/schema/beans"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://www.springframework.org/schema/beans
  4. http://www.springframework.org/schema/beans/spring-beans.xsd">
  5. <import resource="common/spring-common.xml"/>
  6. <import resource="dao/spring-dao.xml"/>
  7. <import resource="beans/spring-beans.xml"/>
  8. </beans>

Spring @Import注解示例

Spring提供了另一种@Import注解,允许从另一个配置类中加载@Bean定义。

  1. @Configuration
  2. public class ConfigA {
  3. @Bean
  4. public A a() {
  5. return new A();
  6. }
  7. }
  8. @Configuration
  9. @Import(ConfigA.class)
  10. public class ConfigB {
  11. @Bean
  12. public B b() {
  13. return new B();
  14. }
  15. }

现在,在实例化上下文时不需要同时指定ConfigAclass和ConfigBclass,只需要明确提供e1d9d1即可。

  1. public static void main(String[] args) {
  2. ApplicationContext ctx = new AnnotationConfigApplicationContext(ConfigB.class);
  3. // now both beans A and B will be available...
  4. A a = ctx.getBean(A.class);
  5. B b = ctx.getBean(B.class);
  6. }

加载多个配置类文件示例

@Import注解也可以用来从多个配置类文件中加载@Bean的。

  1. @Configuration
  2. public class ConfigA {
  3. @Bean
  4. public A a() {
  5. return new A();
  6. }
  7. }
  8. @Configuration
  9. public class ConfigB {
  10. @Bean
  11. public B b() {
  12. return new B();
  13. }
  14. }
  15. @Configuration
  16. public class ConfigC {
  17. @Bean
  18. public C c() {
  19. return new C();
  20. }
  21. }
  22. @Configuration
  23. @Import(value = {ConfigA.class, ConfigB.class, ConfigC.class})
  24. public class ConfigD {
  25. @Bean
  26. public D d() {
  27. return new D();
  28. }
  29. }

相关文章