PropertyPlaceholderConfigurer的使用
1 介绍:可以使用这个类把部分的配置外部化,方便管理,还可以使得Spring的核心配置文件简洁
2 我拿注册jdbc当作列子,最贴近我们编程
由于我建的是Maven工程,所以我有如下maven依赖(其他jar包自动导入)
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring-version}</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.25</version> </dependency> </dependencies>
Spring的核心配置文件
<?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-4.1.xsd"> <context:component-scan base-package="liusheng" /> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations" value="classpath:database.properties"/> </bean> <!-- registerDriver(Driver driver) 使用上述静态方法注册驱动 因为registerDriver的返回值为void,所以我把下面的Bean的abstract设施为true 防止报错 --> <bean factory-method="registerDriver" class="java.sql.DriverManager" abstract="true"> <constructor-arg > <bean class="${driver}" /> </constructor-arg> </bean> <!-- getConnection(String url, String user, String password) 使用上面的静态方法来获取链接 --> <bean name="connect" class="java.sql.DriverManager" factory-method="getConnection"> <constructor-arg value="${user}" index="1"/> <constructor-arg value="${password}" index="2"></constructor-arg> <constructor-arg value="${url}" index="0"></constructor-arg> </bean> </beans>
测试类:
package liusheng.test; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml") public class ResourceTest { @Autowired Connection connection; //我查的是学生表 @Value("select *from student") //sql语句 String sql; @Test public void test() throws Exception { PreparedStatement stmt = connection.prepareStatement(sql); ResultSet rs = stmt.executeQuery(); //创建StringBuilder方便使用 StringBuilder sb=new StringBuilder(); //从1开始 while(rs.next()){ sb.append(rs.getString(1)+" ").append(rs.getString(2)+" ").append(rs.getString(3)+"\n"); } System.out.println(sb); } }
结果
感觉用的还行,虽然没有框架用的那么舒服,因为只是做个测试,所以也没有什么。我于是又萌发了一个思想:能不能把sql写在配置文件中
想了一会感觉不能把字符串注入字符串,但是可以在配置文件中注册一个list或者map都可以,如我就注册一个list
<!-- 部分代码--> <util:list id="sqlList"> <value >${selectAll}</value> <value >${insert}</value> </util:list>
propeities的配置文件
user=root
url=jdbc:mysql:///liusheng
driver=com.mysql.jdbc.Driver
password=root
selectAll=select *from student
insert=insert into student(name,password)
测试类:
package liusheng.test; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml") public class ResourceTest { @Autowired Connection connection; //我查的是学生表 /*@Value("select *from student")*/ //sql语句 @Value("#{sqlList}") List<String> list; @Value("#{sqlList[0]}") String sql; @Test public void test() throws Exception { PreparedStatement stmt = connection.prepareStatement(list.get(0)); ResultSet rs = stmt.executeQuery(); //创建StringBuilder方便使用 StringBuilder sb=new StringBuilder(); //从1开始 while(rs.next()){ sb.append(rs.getString(1)+" ").append(rs.getString(2)+" ").append(rs.getString(3)+"\n"); } System.out.println(sb); } @Test public void test1() throws SQLException{ System.out.println( connection.createStatement().execute(sql)?"成功":"失败"); } }
测试test1结果
测试test2结果
结论:总之Spring非常的灵活,一般来说只要你想到的,spring就能做到,真心强大(Spring)