Spring学习十二----------Bean的配置之@ImportResource和@Value

本文详细介绍如何在Spring框架中使用@ImportResource注解引入XML配置文件,并通过@Value注解从配置文件中读取属性值。具体包括项目结构、pom.xml配置、XML配置文件、属性文件、Java配置类及单元测试的实现。

© 版权声明:本文为博主原创文章,转载请注明出处

@ImportResource

-引入XML配置文件

@Value

-从配置文件中获取值

实例

1.项目结构

2.pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	
	<modelVersion>4.0.0</modelVersion>
	
	<groupId>org.spring</groupId>
	<artifactId>Spring-ImportResource</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>Spring-ImportResource Maven Webapp</name>
	<url>http://maven.apache.org</url>
	
	<!-- 统一开发环境 -->
	<properties>
		<spring.version>4.3.8.RELEASE</spring.version>
	</properties>
	
	<dependencies>
		<!-- junit依赖 -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>
		<!-- spring核心依赖 -->
		<dependency>
		    <groupId>org.springframework</groupId>
		    <artifactId>spring-core</artifactId>
		    <version>${spring.version}</version>
		</dependency>
		<dependency>
		    <groupId>org.springframework</groupId>
		    <artifactId>spring-beans</artifactId>
		    <version>${spring.version}</version>
		</dependency>
		<dependency>
		    <groupId>org.springframework</groupId>
		    <artifactId>spring-context</artifactId>
		    <version>${spring.version}</version>
		</dependency>
	</dependencies>
	
	<build>
		<finalName>Spring-ImportResource</finalName>
	</build>
	
</project>

3.spring-importresource.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">
        
	<context:component-scan base-package="org.spring.importresource"/>
        
</beans>

4.jdbc.properties

jdbc.url=127.0.0.1
#若使用username,则会获取系统的用户名
jdbc.username=root
jdbc.password=123456

5.config.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">
        
	<context:property-placeholder location="classpath:/jdbc.properties"/>
        
</beans>

6.DriverManage.java

package org.spring.importresource;

public class DriverManage {

	public DriverManage(String url, String username, String password) {
		
		System.out.println("url:" + url);
		System.out.println("username:" + username);
		System.out.println("password:" + password);
		
	}
	
}

7.DriverConfig.java

package org.spring.importresource;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;

@Configuration
@ImportResource("classpath:config.xml")//引入xml配置文件
public class DriverConfig {

	@Value("${jdbc.url}")//从配置文件中取值
	private String url;
	
	@Value("${jdbc.username}")
	private String username;
	
	@Value("${jdbc.password}")
	private String password;
	
	@Bean
	public DriverManage myDriver() {
		
		return new DriverManage(url, username, password);
		
	}
	
}

8.TestBase.java

package org.spring.importresource.test;

import org.junit.After;
import org.junit.Before;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.util.StringUtils;

public class TestBase {

	private ClassPathXmlApplicationContext context;
	private String springXmlPath;
	
	/**
	 * 无参构造器
	 */
	public TestBase() {

	}
	
	/**
	 * 含参构造器,初始化spring配置文件路径
	 * 
	 * @param springXmlPath
	 * 						spring配置文件路径
	 */
	public TestBase(String springXmlPath) {
		
		this.springXmlPath = springXmlPath;
		
	}
	
	/**
	 * 初始化spring配置文件到IOC容器中
	 */
	@Before
	public void before() {
		
		if(StringUtils.isEmpty(springXmlPath)) {
			springXmlPath = "classpath:spring-*.xml";
		}
		context = new ClassPathXmlApplicationContext(springXmlPath.split("[,\\s]+"));
		context.start();
		
	}
	
	/**
	 * 销毁IOC容器
	 */
	@After
	public void after() {
		
		if(context != null){
			context.destroy();
		}
		
	}
	
	/**
	 * 根据bean ID获取bean对象
	 * 
	 * @param beanId
	 * 				bean ID
	 * @return
	 */
	public Object getBean(String beanId) {
		
		return context.getBean(beanId);
		
	}
	
}

9.TestSpringImportResource.java

package org.spring.importresource.test;

import org.junit.Test;
import org.spring.importresource.DriverManage;

public class TestSpringImportResource extends TestBase {

	public TestSpringImportResource() {
		
		super("classpath:spring-importresource.xml");
		
	}
	
	@Test
	public void testDriverManager() {
		
		DriverManage dm = (DriverManage) super.getBean("myDriver");
		System.out.println(dm.getClass().getName());
		
	}

}

10.效果预览

参考:http://www.imooc.com/video/4034

转载于:https://www.cnblogs.com/jinjiyese153/p/6757047.html

### Spring Batch Jobs 配置文件加载方式及调用方法 在 Spring Batch 中,配置文件的加载 Job 的调用可以通过多种方式实现。以下将详细介绍常见的配置文件加载方式以及调用方法。 #### 1. 使用 XML 配置文件 Spring Batch 支持通过 XML 文件定义 Job Step。XML 配置文件通常位于 `src/main/resources` 目录下,可以通过 `@ImportResource` 注解引入。 ```java @Configuration @ImportResource("classpath:batch-config.xml") public class BatchConfig { // 其他配置代码 } ``` 在 `batch-config.xml` 文件中,可以定义 Job Step 的详细信息[^1]。例如: ```xml <job id="exampleJob" xmlns="http://www.springframework.org/schema/batch"> <step id="step1"> <tasklet> <chunk reader="itemReader" writer="itemWriter" commit-interval="10"/> </tasklet> </step> </job> ``` #### 2. 使用 Java 配置类 从 Spring Batch 2.2.0 版本开始,支持纯 Java 配置。通过 `@EnableBatchProcessing` 注解启用批处理支持,并结合 `JobBuilderFactory` `StepBuilderFactory` 创建 Job Step。 ```java @Configuration @EnableBatchProcessing public class BatchConfig { @Autowired private JobBuilderFactory jobBuilderFactory; @Autowired private StepBuilderFactory stepBuilderFactory; @Bean public Job exampleJob() { return jobBuilderFactory.get("exampleJob") .start(exampleStep()) .build(); } @Bean public Step exampleStep() { return stepBuilderFactory.get("exampleStep") .<String, String>chunk(10) .reader(itemReader()) .writer(itemWriter()) .build(); } @Bean public ItemReader<String> itemReader() { return new ExampleItemReader(); } @Bean public ItemWriter<String> itemWriter() { return new ExampleItemWriter(); } } ``` 这种方式避免了对 XML 文件的依赖,使配置更加简洁直观[^3]。 #### 3. 加载外部配置文件 如果需要从外部加载配置文件(如 `application.properties` 或 `application.yml`),可以通过 Spring Boot 的自动配置机制完成。例如,在 `application.properties` 中设置以下内容以控制 Job 的启动行为: ```properties spring.batch.job.enabled=true ``` 当 `spring.batch.job.enabled` 设置为 `true` 时,所有已注册的 Jobs 将在应用启动时自动运行[^1]。 #### 4. 异步调用 Jobs 为了异步执行 Spring Batch Jobs,可以配置一个 `SimpleJobLauncher` 并设置 `TaskExecutor`。以下是示例代码: ```java @Bean public SimpleJobLauncher simpleJobLauncher(JobRepository jobRepository) { SimpleJobLauncher jobLauncher = new SimpleJobLauncher(); jobLauncher.setJobRepository(jobRepository); jobLauncher.setTaskExecutor(new SimpleAsyncTaskExecutor()); return jobLauncher; } ``` 通过上述配置,Jobs 将在单独的线程中运行,从而实现异步调用[^4]。 #### 5. 动态加载配置文件 如果需要动态加载配置文件,可以使用 `PropertySourcesPlaceholderConfigurer` 或 `Environment` 接口。例如: ```java @Value("${custom.config.path}") private String configPath; @Bean public static PropertySourcesPlaceholderConfigurer propertyConfigurer() { return new PropertySourcesPlaceholderConfigurer(); } ``` 然后在运行时根据 `configPath` 加载对应的配置文件。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值