spring @import注解

引入

在这之前,想必大家都使用过<import/>标签,它可以从其他的配置文件中加载Bean,例如这样:

---GlobalBeans.xml
<beans>
    <bean id="c" class = "com.xxx.C"></bean>
    <import resource="beans1.xml"/>
    <import resource="beans2.xml"/>
</beans>

----beans1.xml
<beans>
    <bean id="a",class = "com.xxx.A"></bean>
</beans>

----beans2.xml
<beans>
    <bean id="b",class = "com.xxx.B"></bean>
</beans>

如上,GlobalBeans.xml中声明了C类的实例,并且使用import标签导入了beans1.xml和beans2.xml配置文件。最终效果等同于如下代码块:

---GlobalBeans.xml
<beans>
     <bean id="c" class = "com.xxx.C"></bean>
     <bean id="a",class = "com.xxx.A"></bean>
     <bean id="b",class = "com.xxx.B"></bean>
</beans>

所以下面的代码块也会得到正确的结果。

 ApplicationContext ctx = new AnnotationConfigApplicationContext(GlobalBeans.class);

    // now both beans A and B and Cwill be available...
    A a = ctx.getBean(A.class);
    B b = ctx.getBean(B.class);
    C c = ctx.getBean(C.class);

在这里你可能会想,那为什么不直接将所有bean的定义都写在GlobalBeans配置文件中,这样还避免了import的过程。
这是因为:

  1. 如果将所有Bean的定义都放在全局配置文件中,在未来Bean特别多的情况下,该配置文件将会显得特别臃肿;
  2. 在不同的配置文件中定义不同类型的bean,可以使得配置模块化;(在这里是合而分之)
  3. 通过import,可以选择性得进行导入。
@import注解
基于spring一贯的风格,它也提供了基于注解方式的实现。 也就是import注解,不同的是它是基于配置类导入(也就是标注了@Configuration注解的类)、而非xml。 同样使用一个实例进行说明:
@Configuration
public class ConfigA {

    @Bean
    public A a() {
        return new A();
    }
}

@Configuration
public class ConfigB {

    @Bean
    public B b() {
        return new B();
    }
}

@Configuration
@Import({ConfigA.class,ConfigB.class})
public class SystemConfig {

}

以SystemConfig配置类初始化Spring容器,分别获取在ConfigA和ConfigB配置类中定义的Bean。如下访问将是合法的。

public static void main(String[] args) {
    ApplicationContext ctx = new AnnotationConfigApplicationContext(SystemConfig.class);

    // now both beans A and B will be available...
    A a = ctx.getBean(A.class);
    B b = ctx.getBean(B.class);
}

@import注解可以帮助我们将多个配置文件(可以是按功能划分,也可以是按业务划分)导入到单个主配置文件中,这样我们就可以从导入的配置类中加载对应Bean,以达到统一配置的目的。(在这里是分而合之)

@import注解 TODO import other way
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值