`

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

分享到:
评论

相关推荐

    使用java类配置Bean

    传统的XML配置方式是通过`&lt;bean&gt;`标签在XML文件中定义Bean的属性和依赖关系,而基于Java的配置则是通过编写Java类来完成相同的工作。 **基于Java的配置**(Java-based configuration)引入于Spring 3.0,它的主要...

    Spring————面试题库

    举例来说,使用ClassPathXmlApplicationContext可以从classpath的XML配置文件中读取应用程序上下文,从而初始化Spring IoC容器,并加载应用程序中定义的所有bean。而FileSystemXmlApplicationContext则从文件系统中...

    普通类调用Spring bean对象

    我们可以创建一个配置类,然后在其中声明bean,使用`@ComponentScan`扫描包含普通类的包,这样Spring就能自动管理普通类。同时,也可以在配置类中使用`@Bean`注解创建bean实例,然后在普通类中通过`@Autowired`注入...

    Java EE 框架整合开发⼊⻔到实战——Spring+Spring MVC+MyBatis(微课版)课后习题答案.pdf

    这份文档名为《Java EE 框架整合开发入门到实战——Spring+Spring MVC+MyBatis(微课版)课后习题答案.pdf》,它显然是关于Java EE中流行的三个框架整合使用的教程。这三个框架分别是Spring、Spring MVC和MyBatis,...

    二、Spring源码分析——BeanFactory

    这里,`beans.xml`是配置文件,用于定义bean。 六、使用BeanFactory 获取并使用bean的主要方法有`getBean(String beanName)`,如: ```java MyService myService = (MyService) factory.getBean("myService"); ``` ...

    Quartz Spring整合——附带webservice Demo

    7. **Webservice调用**:在定义的Job类中,使用Java的Web服务客户端库(如JAX-WS的`javax.xml.ws.Service`)来调用Web服务。你需要提供服务的WSDL地址,生成服务代理类,并通过代理类的方法发起请求。 8. **异常...

    征服Spring AOP—— Schema

    在IT领域,Spring框架是Java开发中的核心组件,尤其在企业级应用中广泛使用。Spring AOP(面向切面编程)是Spring框架的一个重要组成部分,它允许开发者在不修改源代码的情况下,通过“切面”来关注程序的某些方面,...

    三、Spring源码分析——ApplicationContext

    它支持XML、Java注解和基于Java的配置等多种方式来定义Bean。ApplicationContext通过实现BeanFactory接口,不仅能够初始化和管理Bean,还能够处理事件、国际化的消息、资源加载等。 1. **配置加载**: ...

    Spring boot——@DeclareParents例子

    当我们在一个切面类中使用`@DeclareParents`时,Spring会为匹配到的bean创建代理,并将指定的接口实现注入到这些bean中。 首先,我们需要了解`@Aspect`的使用。在Spring Boot项目中,创建一个带有`@Aspect`注解的类...

    Spring特性——事件驱动模型

    1. **事件(Event)**:在Spring中,事件通常是一个简单的Java类,继承自`java.util.EventObject`。这个类通常包含事件相关的数据,但也可以只是一个空的标记类,用于标识发生了某种类型的事件。例如,我们可以定义...

    【框架源码篇 04】Spring源码手写篇-Bean定义配置化

    在本篇【框架源码篇 04】中,我们将深入探讨Spring框架的核心概念——Bean定义配置化。Spring是Java领域最广泛使用的依赖注入(Dependency Injection,简称DI)和面向切面编程(Aspect-Oriented Programming,简称...

    实例化Spring bean的两种工厂方法

    在Spring配置文件中,我们需要定义一个工厂bean,然后指定该工厂bean的`factory-bean`属性,以及工厂bean中用于创建目标bean的方法,即`factory-method`属性。下面是一个简单的例子: ```xml &lt;bean id="myFactory...

    MyBatis与Spring整合——通过官方文档进行最简单的整合

    #### 三、Spring框架简介 Spring框架是用于构建企业级Java应用程序的一种轻量级框架。它提供了一种灵活的方式来配置和管理应用程序的组件。Spring的核心特性包括: 1. **依赖注入(Dependency Injection, DI)**:...

    Spring学习笔记(9)----让Spring自动扫描和管理Bean

    除了基本的`@Component`家族,Spring还提供了一些高级注解,如`@Scope`用于定义Bean的作用域,`@Lazy`用于延迟初始化Bean,`@Qualifier`用于在多个相同类型的Bean中指定特定的一个。 ### **总结** Spring的自动...

    java——spring

    Spring框架是Java开发中的核心组件,它为构建企业级应用提供了全面的解决方案。Spring以其依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)而闻名,它简化了Java EE应用...

    spring——第十四节素材.rar

    这些素材可能会讲解如何配置Spring容器,如何编写Bean定义,如何使用注解进行编程,或者如何实现AOP切面,甚至可能涉及到Spring与其他技术的集成,比如数据库连接、RESTful服务等。 在Spring框架中,依赖注入是核心...

    精通Spring--Java轻量级架构开发实践.pdf

    《精通Spring--Java轻量级架构开发实践》是关于Spring框架的一本深入实践的书籍,主要探讨了如何在Java环境中高效地使用Spring进行轻量级应用程序开发。书中的第四章和第十章尤其重要,涵盖了Spring的核心概念和技术...

    《spring in action》中文第三版

    - **Java配置**:Spring 3引入了一种新的配置方式,即通过Java类来定义Bean,这种方式比XML更加灵活。 ### Bean的生命周期 Spring框架为Bean提供了一个完整的生命周期管理机制。Bean的生命周期主要包括以下几个...

Global site tag (gtag.js) - Google Analytics