`

Spring(17)——使用Java类的形式定义bean(三)

阅读更多

17.4 组合多个配置

通常在使用基于Java类的配置时我们可能不是单独使用一个Java类进行配置,有的时候可能会建立多个Java类进行配置,也可能是基于Java类的配置和基于XML的配置一起使用,这就需要我们将多个配置整合在一起了。

17.4.1 多个Java类配置组合

对于多个Java配置类的情况,我们可以通过将@Import标注在对应的配置类上以引入另外一个配置类,这样我们在使用的时候就可以只以其中的某个或某几个配置类来直接作为配置类。如下示例我们在配置类SpringConfig上使用@Import引入了另外两个配置类ServiceConfig和DaoConfig。

@Configuration
@Import({ServiceConfig.class, DaoConfig.class})
public class SpringConfig {

}

那么对应在使用的时候我们可以只显示的使用SpringConfig作为配置类,但实际上是使用了SpringConfig、ServiceConfig和DaoConfig三个配置类,即如下示例中的context将包含这三个配置类中定义的所有的bean。

@ContextConfiguration(classes={SpringConfig.class})
@RunWith(SpringJUnit4ClassRunner.class)
public class ConfigurationTest {
	
	@Autowired
	private ApplicationContext context;
	
}

17.4.2 以Java类配置为主组合XML配置

当以Java配置类为主组合XML配置时我们只需要在Java配置类上使用@ImportResource进行标注以引入对应的XML配置即可。如下示例中我们即通过@ImportResource引入了类路径下的applicationContext.xml,这样我们可以继续使用SpringConfig作为配置类,但其中会包含applicationContext.xml中定义的bean。

@Configuration
@ImportResource({"classpath:applicationContext.xml"})
public class SpringConfig {

	@Bean
	public Hello hello() {
		return new Hello();
	}
	
}

17.4.3 以XML配置为主组合Java类配置

由于@Configuration是标注了@Component的,所以以XML配置为主时,如果我们的XML配置定义了<context:component-scan/>,且其能扫描到我们使用了@Configuration进行标注的配置类,那么对应的配置类将作为一个bean定义到对应的bean容器中。与此同时,Spring能检测到其中使用@Bean进行标注的方法,并把它们作为一个bean进行定义。其实如果我们的配置类不是使用的@Configuration进行标注的,而是使用的其它Spring会把它当做一个bean进行定义的注解进行标注也是可以的,如@Component、@Service等。

但是当我们在XML配置中没有使用<context:component-scan/>或者对应的<context:component-scan/>扫描不到我们基于Java的配置类,这个时候就需要我们自己在XML配置中定义对应的bean了,这样Spring就能自动组合基于Java类配置的bean定义了。

<bean class="com.app.SpringConfig"/>

自己单独在XML配置中定义Java配置类对应的bean时,如果我们的配置类中有使用@Autowired进行自动注入,那就需要启用<context:annotation-config/>。当然如果使用了<context:component-scan/>就可以不再单独指定<context:annotation-config/>了,因为<context:component-scan/>默认会启用<context:annotation-config/>

(注:本文是基于Spring4.1.0所写)

 

 

本文转自:https://elim.iteye.com/blog/2389626

分享到:
评论

相关推荐

    跟我学spring3(1-7)

    【第五章】Spring表达式语言 之 5.4在Bean定义中使用EL—跟我学spring3 【第六章】 AOP 之 6.1 AOP基础 ——跟我学spring3 【第六章】 AOP 之 6.2 AOP的HelloWorld ——跟我学spring3 【第六章】 AOP 之 6.3 基于...

    跟我学spring3(8-13)

    【第十二章】零配置 之 12.4 基于Java类定义Bean配置元数据 ——跟我学spring3 【第十二章】零配置 之 12.5 综合示例-积分商城 ——跟我学spring3 【第十三章】 测试 之 13.1 概述 13.2 单元测试 ——跟我学spring3 ...

    跟我学spring3(8-13).pdf

    11.2 实现通用层 11.3 实现积分商城层 12.1 概述 12.2 注解实现Bean依赖注入 12.3 注解实现Bean定义 12.4 基于Java类定义Bean配置元数据 12.5 综合示例-积分商城 13.1 概述 13.2 单元测试 集成测试 ——跟我学spring3

    Spring.3.x企业应用开发实战(完整版).part2

    4.10.1 使用注解定义Bean 4.10.2 使用注解配置信息启动Spring容器 4.10.3 自动装配Bean 4.10.4 Bean作用范围及生命过程方法 4.11 基于Java类的配置 4.11.1 使用Java类提供Bean定义信息 4.11.2 使用基于Java类的配置...

    Spring3.x企业应用开发实战(完整版) part1

    4.10.1 使用注解定义Bean 4.10.2 使用注解配置信息启动Spring容器 4.10.3 自动装配Bean 4.10.4 Bean作用范围及生命过程方法 4.11 基于Java类的配置 4.11.1 使用Java类提供Bean定义信息 4.11.2 使用基于Java类的配置...

    Spring4.x企业应用开发 有书签,很方便查找

    本书是在《精通Spring 3.x——企业应用开发详解》的基础上,历时一年的重大调整改版而成的,延续了上一版本“追求深度,注重原理,不停留在技术表面”的写作风格,力求使读者在熟练使用Spring的各项功能的同时透彻...

    JAVA上百实例源码以及开源项目

     Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  设定字符串为“张三,你好,我是李四”  产生张三的密钥对(keyPairZhang)  张三生成公钥(publicKeyZhang...

    SpringBoot下的SpringAOP-day04-源代码

    SpringBoot下的Spring——DAY04——动态代理总结、AOP、自定义注解进行拦截、动态获取注解参数、通知方法 1.动态代理总结 1.1 JDK动态代理特点 1.2 CGlib动态代理 1.2.1 CGLib特点说明 1.3 动态代理的作用 2 Spring...

    JAVA上百实例源码以及开源项目源代码

     Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  设定字符串为“张三,你好,我是李四”  产生张三的密钥对(keyPairZhang)  张三生成公钥(publicKeyZhang...

    swing界面设计之JTree

    创建 Spring app-context.xml bean 定义文件 19 运行应用程序 20 定义 bean 属性 21 创建 to-do 列表:创建一个可重用组件并在表中显示数据 23 创建一个可重用的面板 23 将 bean 组合在一起 24 添加一个表并重用这个...

    第2章 容器和bean的基本原理1

    Spring框架技术—— 容器和bean的基本原理本章内容知识点掌握程度 难易程度传统组件调用方式理解理解为何使用IoC理解掌握理解Bean的定义和命名掌握Be

    JAVA程序开发大全---上半部分

    13.4.2 反向工程生成JPA 实体类和Spring DAO类 242 13.4.3 创建测试类 243 13.5 本章小结 243 第14章 Web Service的开发及应用 244 14.1 Web Service概述 244 14.2 使用MyEclipse创建Web Service项目 245 14.2.1 ...

    SpringSecurity 3.0.1.RELEASE.CHM

    7.4. 使用其他过滤器 —— 基于框架 8. 核心安全过滤器 8.1. FilterSecurityInterceptor 8.2. ExceptionTranslationFilter 8.2.1. AuthenticationEntryPoint 8.2.2. AccessDeniedHandler 8.3. ...

    Spring Security-3.0.1中文官方文档(翻译版)

    7.4. 使用其他过滤器—— 基于框架 8. 核心安全过滤器 8.1. FilterSecurityInterceptor 8.2. ExceptionTranslationFilter 8.2.1. AuthenticationEntryPoint 8.2.2. AccessDeniedHandler 8.3. ...

    NewsSystem:基于Struts + Spring + Hibernate + Bootstrap

    jQuery的引导程序UEditor——在线HTML编辑器模块介绍公共类设计Web.xml中配置Struts及初始化Spring容器,准备WEB-INF路径下applicationContex.xml文件作为Spring配置文件,在Spring中定义数据源Bean,使用C3P0数据...

    将 Flex 集成到 Java EE 应用程序的最佳实践(完整源代码)

    现在,Java EE 后端与 Flex 前端的接口已经定义好了,要完成 Java EE 后端的接口实现类非常容易,利用 Spring 强大的依赖注入功能,可以通过几行简单的代码完成: 清单 2. FlexServiceImpl class public ...

    Spring Security 中文教程.pdf

    7.4. 使用其他过滤器 —— 基于框架 8. 核心安全过滤器 8.1. FilterSecurityInterceptor 8.2. ExceptionTranslationFilter 8.2.1. AuthenticationEntryPoint 8.2.2. AccessDeniedHandler 8.3. ...

    +Flex+集成到+Java+EE+应用程序的最佳实践(完整源代码)

    现在,Java EE 后端与 Flex 前端的接口已经定义好了,要完成 Java EE 后端的接口实现类非常容易,利用 Spring 强大的依赖注入功能,可以通过几行简单的代码完成: 清单 2. FlexServiceImpl class public class ...

    Grails权威指南

     6.2.2 使用闭包修整(closureurrying)定义测试数据  6.3 使用webtest进行功能测试  6.3.1 安装webtest  6.3.2 生成web测试  6.3.3 执行web测试  6.3.4 与表单交互  6.4 本章小结 第7...

Global site tag (gtag.js) - Google Analytics