最近对注解了解的比较多, 也在实际项目中实战了一把, 同时对spring中关于一些注解的源代码看了看, 下面是实际应用中对@ContextConfiguration的一些扩展
经过查看spring的源代码, 可以知道@ContextConfiguration在默认情况下是使用ClassPath的方式来加载locations指定的bean xml配置文件, 也就是说配置文件必须放在classpath路径下, 但是有些情况下, 我们需要通过相对文件路径来加载配置文件, 这个就需要自己动手来定制一番, 还好spring在这一点还是留有一定的扩展余地. 这里需要定义两个类, 一个是继承XmlBeanDefinitionReader, 然后在复写的loadBeanDefinitions方法中, 将配置文件路径包装成FileSystemResource类:
public class FileSystemXmlBeanDefinitionReader extends XmlBeanDefinitionReader {
public FileSystemXmlBeanDefinitionReader(BeanDefinitionRegistry registry) {
super(registry);
}
@SuppressWarnings("unchecked")
@Override
public int loadBeanDefinitions(String location, Set actualResources)
throws BeanDefinitionStoreException {
ResourceLoader resourceLoader = getResourceLoader();
if (resourceLoader == null) {
throw new BeanDefinitionStoreException(
"Cannot import bean definitions from location [" + location
+ "]: no ResourceLoader available");
}
Resource resource = new FileSystemResource(location);
int loadCount = loadBeanDefinitions(resource);
if (actualResources != null) {
Assert.isNull(actualResources);
}
if (logger.isDebugEnabled()) {
logger.debug("Loaded " + loadCount
+ " bean definitions from location pattern [" + location
+ "]");
}
return loadCount;
}
}
接下来就是从GenericXmlContextLoader继承, 并复写modifyLocations方法, 将配置文件路径转换成绝对路径, 另外还需要将前面的FileSystemXmlBeanDefinitionReader类作为配置文件的reader, 即可:
public class FileSystemXmlContextLoader extends GenericXmlContextLoader {
@Override
protected String[] modifyLocations(Class<?> clazz, String... locations) {
String[] modifiedLocations = new String[locations.length];
for (int i = 0; i < locations.length; i++) {
String path = locations[i];
if (path != null && path.startsWith("/")) {
path = path.substring(1);
}
modifiedLocations[i] = new File(path).getAbsolutePath();
}
return modifiedLocations;
}
@Override
protected BeanDefinitionReader createBeanDefinitionReader(
GenericApplicationContext context) {
return new FileSystemXmlBeanDefinitionReader(context);
}
}
然后在@ContextConfiguration注解中指定我们写的loader即可, 即loader = FileSystemXmlContextLoader.class
比如说, 我的一个@ContextConfiguration这样写:
@ContextConfiguration(locations = {
"/src/test/resources/spring-xx-dependency.xml",
"/src/test/resources/spring-xx-config.xml",
"/src/test/resources/spring-xx-jdbc.xml",
"/../xxx/src/main/webconfig/spring-xx-tx.xml",
"/../xxx/src/main/webconfig/spring-xx-service.xml",
"/src/test/resources/spring-xx-dao.xml" }, loader = FileSystemXmlContextLoader.class)
分享到:
相关推荐
在实际开发中,Spring提供了多种组合和扩展这些注解的方式,例如使用`@Qualifier`来进一步指定注入的Bean,或者使用`@Configuration`和`@Bean`来手动配置Bean。这使得Spring框架能够灵活地管理和装配复杂的依赖关系...
在传统的软件设计中,对象的创建和依赖关系的维护通常由代码自身来完成,而在Spring Ioc中,这些控制权被反转给了Spring容器,使得对象的生命周期管理和依赖注入变得更为灵活和可扩展。 **一、控制反转(IoC)概念*...
在`IOC_Project`这个压缩包文件中,很可能是包含了一个示例项目,用于演示如何使用Spring的IOC Annotation注入。通过查看和运行这个项目,你可以更深入地了解这些概念并实践它们。项目的结构可能包括了源代码文件(`...
Spring框架是Java开发中广泛应用的一个轻量级框架,它的核心特性是依赖注入(Dependency Injection,简称DI)和面向切面编程(Aspect-Oriented Programming,简称AOP)。配置注解是Spring框架中的一种简化配置的方式...
在本例中使用的版本是 **1.5.2**。 - **自动配置**: Spring Boot 可以自动配置大多数 Spring 组件,开发者只需要添加相应的依赖即可。 - **外部化配置**: 支持将配置从应用代码中分离出来,便于管理且不影响代码。 ...
而Druid是一个高性能、功能强大的数据库连接池,它不仅提供了监控和扩展功能,还能有效提高数据库的访问性能。 整合Spring Boot、MyBatis和Druid的第一步是添加依赖。在`pom.xml`文件中,你需要引入Spring Boot的...
在Spring Boot项目中,配置数据源,使用`@Configuration`和`@EnableConfigurationProperties`注解: ```java @Configuration @EnableConfigurationProperties({DataSourceProperties.class}) public class ...
下面以 XML 配置为例,展示如何创建一个简单的 Spring 2.5 应用: 1. **创建 Bean 定义** 在 `src` 目录下创建一个名为 `com.example` 的包,然后创建一个 Java 类,例如 `MyClass.java`: ```java package ...
在IT行业中,Spring Boot是一个非常流行的微服务框架,它简化了Spring应用的初始搭建以及开发过程。当项目需要处理来自不同数据源的数据时,Spring Boot提供了支持多数据源的能力。本篇文章将深入探讨如何在Spring ...
在Java开发领域,Spring框架无疑是使用最为广泛的轻量级框架之一,其中的核心组件就是IOC(Inversion of Control)容器。本文将深入剖析Spring的IOC容器,理解其工作原理和重要功能,以帮助开发者更好地利用这一强大...
在本篇【spring3 mvc系列一:架构基本配置(注解版)】中,我们将深入探讨Spring MVC框架的核心概念和基础配置,特别是在使用注解进行配置时的关键点。Spring MVC是Spring框架的一个模块,专注于处理Web应用程序的请求...
在本例中,`test-starter`可能是一个自定义的Starter,用于提供特定功能或者简化与`test-configuration`相关的配置。 2. **自定义配置类**: 在Spring Boot中,我们可以创建自己的@Configuration类来定义bean和其他...
本项目“Spring-Configuration-using-Annotation-and-Java-Source-Code”深入探讨了如何使用Java注解来构建Spring应用的配置。以下是关于Java注解和Spring框架在配置中的应用的详细知识点: 1. **Java注解**: - ...
《Spring Boot基础学习指南——以`sleeve-master_spring_`项目为例》 Spring Boot作为Java领域中的热门框架,以其简化开发、快速启动的特点深受开发者喜爱。本文将围绕标题为`sleeve-master_spring_`的项目,深入...
在本文中,我们将深入探讨如何将MyBatis与Spring Boot集成,以便构建高效、可扩展的Java应用程序。Spring Boot以其简化配置和快速开发的特点,已经成为Java开发者首选的微服务框架。MyBatis作为轻量级的持久层框架,...
例如,使用`@Component`标记一个类为Spring的bean,使用`@Autowired`自动装配依赖: ```java @Component("exampleBean") public class ExampleClass { @Autowired private Dependency dependency; } ``` Java...
Spring框架提供了强大的AOP支持,本文将以一次演出为例,详细介绍如何在Spring环境中构建一个简单的AOP切面,并进行相应的测试。 #### 二、基本概念介绍 1. **切点(Pointcut)**:定义了何处执行切面代码的位置。在...
而Spring框架是Java领域中广泛使用的应用框架,它提供了一种优雅的方式来管理应用的配置和服务。当我们将MongoDB与Spring整合时,可以充分利用Spring的依赖注入和数据访问抽象,简化MongoDB在Java应用中的使用。 ...
标题“spring加载”涉及到的是Spring框架的初始化过程,这一过程对于理解Spring如何管理bean和依赖注入至关重要。在Spring框架中,加载是指从配置文件(如XML、Java配置或注解)中读取bean定义,并创建bean实例的...
#### 一、Spring框架简介 Spring是一个开源的Java应用框架,由Rod Johnson创建并领导开发。Spring的核心特性包括依赖注入(Dependency Injection,DI)、面向切面编程(Aspect Oriented Programming,AOP)以及一...