装配SpringBean(六)--配置文件加载方式
2021-06-18 11:05
标签:复杂 encoding 否则 lse odi beans 数据 方式 多个 spring中的配置文件有两种: 在spring中有两种方式加载这两种文件: 详细配置且看下文: 一、加载spring配置文件*.xml 假设有一个关于数据源的配置文件spring-database.xml,它的配置内容如下: 1??通过注解+java配置方式 第一步:通过注解+配置方式时需要创建一个配置类AppConfig.java 上面的配置中: 1??使用注解@ImportResource引入配置文件,可以是多个; 2??通过注解@ComponentScan定义spring扫描的包(因为下面有个bean的类我定义在这个包下,所以这里加上这个扫描路径) 第二步:写一个获取数据库连接的类 上面代码中加粗部分: 第三步:编写测试方法 这里就是使用注解+java配置方式获取bean,调用其方法,测试结果: 配置成功,有些书上说这个地方获取DataSource时可以使用自动注解,我试了一下是不可以的,其实按理说也是不行的,因为DataSource是第三方包中的类,我们无法对它进行修改,如果使用自动注解获取,必定要给他增加@Component注解进行定义,所以这种方式只能通过配置获取。 2??通过XML方式 使用XML的方式,假设我要在spring-bean.xml中引入spring-database.xml文件,只需要在spring-bean.xml中加入一句代码即可: 这样就可以当作spring-bean.xml文件进行使用了,其实这种方式主要是为了将不同业务的配置通过文件区分开来,不要是spring-bean.xml文件变得很庞大复杂,具体实现不做介绍。 二、加载属性配置文件*.properties 依然是数据源的配置文件,只不过这次将其写在属性配置文件db.properties中,配置如下: 1??通过注解+java配置方式 第一步:通过注解+配置方式时需要创建一个配置类AppConfig.java 上面的配置中: 第二步:测试 获取属性文件中的数据库连接URL,看能不能获取到,测试结果如下: 可见获取成功。 上面的测试中是通过环境来获取对应的配置属性,但如果这样在spring中是没有解析属性占位符的能力,spring推荐使用一个属性文件解析类PropertySourcePlaceholderConfigurer,使用它就意味允许spring解析对应的属性文件,并通过占位符去引用对应的配置。 修改上述的配置类为如下: 有了上面的配置,就可以通过占位符引用属性值了,如下: 编写测试类: 这样就能获取到了 2??通过XML方式 XML方式的配置如下: 如上,可以配置多个,也可以配置一个,这样以来,就能在spring的配置文件中通过占位符引用属性了。 装配SpringBean(六)--配置文件加载方式 标签:复杂 encoding 否则 lse odi beans 数据 方式 多个 原文地址:https://www.cnblogs.com/hellowhy/p/9715644.html
1 xml version="1.0" encoding="UTF-8"?>
2 beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:context="http://www.springframework.org/schema/context"
4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5 xsi:schemaLocation="http://www.springframework.org/schema/beans
6 http://www.springframework.org/schema/beans/spring-beans.xsd
7 http://www.springframework.org/schema/context
8 http://www.springframework.org/schema/context/spring-context-4.0.xsd">
9
10
11 bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
12 property name="driverClassName" value="org.postgresql.Driver" />
13 property name="url" value="jdbc:postgresql://localhost:5433/postgres" />
14 property name="username" value="postgres" />
15 property name="password" value="postgres" />
16 bean>
17 beans>
1 @ComponentScan(basePackages= {"com.hyc.config"})
2 @ImportResource({"classpath:spring-database.xml"})
3 public class AppConfig {
4
5 }
1 package com.hyc.config;
2 /*
3 * 通过注解+配置的方式加载spring配置文件
4 */
5
6 import java.sql.Connection;
7 import java.sql.SQLException;
8
9 import javax.sql.DataSource;
10
11 import org.springframework.beans.factory.annotation.Autowired;
12 import org.springframework.stereotype.Component;
13
14 @Component("dbba")
15 public class DatasourceByAnnotation {
16
17 @Autowired
18 DataSource dataSource = null;
19
20 // 获取数据库连接
21 public Connection getConnection() {
22 Connection conn = null;
23 try {
24 conn = dataSource.getConnection();
25 if (null != conn) {
26 System.out.println("获取数据库连接成功");
27 } else {
28 System.out.println("获取数据库连接失败");
29 }
30 } catch (SQLException e) {
31 e.printStackTrace();
32 }
33
34 return conn;
35 }
36 }
1 public class GetDatasourceByConfigTest {
2
3 @Test
4 public void testGetByConfig() {
5 AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
6 DatasourceByAnnotation dba = (DatasourceByAnnotation) context.getBean("dbba");
7 dba.getConnection();
8 }
9 }
import resource="spring-database.xml"/>
1 db.driver=org.postgresql.Driver
2 db.url=jdbc:postgresql://localhost:5433/postgres
3 db.username=postgresql
4 db.pwd=postgresql
1 @Configuration
2 @PropertySource(value = { "classpath:db.properties" }, ignoreResourceNotFound = true)
3 public class AppConfig {
4
5 }
1 @Test
2 public void testGetPropByConfig() {
3 AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
4 String url = context.getEnvironment().getProperty("db.url");
5 System.out.println(url);
6 }
1 @Configuration
2 @ComponentScan(basePackages = { "com.hyc.config" })
3 @PropertySource(value = { "classpath:db.properties" }, ignoreResourceNotFound = true)
4 public class AppConfig {
5
6 /**
7 * 定义一个PropertyPlaceholderConfigurer类的bean,它的作用是为了让spring能解析占位符
8 * @return
9 */
10 @Bean
11 public PropertyPlaceholderConfigurer propertyPlaceholderConfigurer() {
12 return new PropertyPlaceholderConfigurer();
13 }
14
15 }
1 @Component("dsb")
2 public class DataSourceBean {
3
4 @Value("${db.driver}")
5 private String driver = null;
6
7 @Value("${db.url}")
8 private String url = null;
9
10 @Value("${db.username}")
11 private String userName = null;
12
13 @Value("${db.pwd}")
14 private String pwd = null;
15
16 public void getDataSourceUrl() {
17 System.out.println(url);
18 }
19
20 }
1 @Test
2 public void testGetPropByConfig1() {
3 @SuppressWarnings("resource")
4 AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
5 DataSourceBean ds = (DataSourceBean) context.getBean("dsb");
6 ds.getDataSourceUrl();
7 }
1 xml version="1.0" encoding="UTF-8"?>
2 beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:context="http://www.springframework.org/schema/context"
4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5 xsi:schemaLocation="http://www.springframework.org/schema/beans
6 http://www.springframework.org/schema/beans/spring-beans.xsd
7 http://www.springframework.org/schema/context
8 http://www.springframework.org/schema/context/spring-context-4.0.xsd">
9
10
11 context:property-placeholder
12 ignore-resource-not-found="false" location="classpath*:db.properties" />
13
14 bean
15 class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
16 property name="locations">
17 array>
18 value>classpath:db.propertiesvalue>
19 value>classpath:log4j.propertiesvalue>
20 array>
21 property>
22 property name="ignoreResourceNotFound" value="false">property>
23 bean>
24 beans>
上一篇:Java非静态代码块和静态代码块