前言
- 第三方资源配置管理
- ioc容器和依赖管理,我们大多数管理的是自己创建的bean,如果是第三方提供的bean是如何管理,我们以数据源对象的ioc管理为例子进行说明。
步骤
第一步: 需要导入相应的依赖包(导入坐标)
pom.xml
XML
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>
第二步:配置xml文件(需要自己了解数据源对象的名称,属性名等等信息)
即数据源bean运行需要哪些信息:
- 因为数据源需要连接数据库(需要连接驱动,url,用户名,密码...),
- 又因为数据源对象只提供了合适的set方法进行使用,
- 因此只能使用setter注入
老版本驱动,一般指5.x版本:
driverClassName: com.mysql.jdbc.Driver
新版本驱动,一般指8.x版本:
driverClassName: com.mysql.cj.jdbc.Driver
mysql8.0版本以上可能还需要配置时区等相关配置
总的来说:
管理第三方bean的工作流程:将哪个对象交给ioc管理,并提供哪些属性,才能使这个对象工作。
spring.xml
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"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test1010?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
</beans>
第三步:创建测试类进行测试
AppTest
java
public class AppTest {
public static void main(String[] args) {
ApplicationContext context =new ClassPathXmlApplicationContext("spring.xml");
DataSource dataSource = (DataSource) context.getBean("dataSource");
System.out.println(dataSource);
}
}
运行结果
扩展
配置信息分离
在resources文件夹下创建一个jdbc.properties配置文件配置连接信息
jdbc.properties
java
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/test1010?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
username=root
password=root
spring.xml
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="jdbc.properties"/>
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</bean>
</beans>
第一步:首先要开启spring提供的命名空间context
新增命名空间
第二步:使用context空间加载properties文件
<context:property-placeholder location="jdbc.properties"/>
第三步:使用属性占位符${},读取properties文件中的属性
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</bean>
注意事项
在配置properties文件时,名称与系统的属性冲突,而系统的属性优先级更高,就会产生错误,这时需要关闭系统属性优先级
<context:property-placeholder location="jdbc.properties" system-properties-mode="NEVER"/>
使用system-properties-mode="NEVER"