[英]Load and Inject to Property Bean from XML Property File with Spring
I am trying to load SQL queries from an XML property file and inject it as a java.util.Property
into my DAO class. 我试图从XML属性文件中加载SQL查询,并将其作为
java.util.Property
注入到我的DAO类中。 The SQLs.xml resides in the same directory as the application context (I'm using Maven structure, so they all under src/main/resources). SQLs.xml与应用程序上下文位于同一目录中(我使用的是Maven结构,因此它们全部位于src / main / resources下)。 My application context file looks like following:
我的应用程序上下文文件如下所示:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:task="http://www.springframework.org/schema/task"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.2.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd">
<bean id="EmployeeDAO" class="pkg.dao.EmployeeDAOImpl">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="oracle.jdbc.OracleDriver" />
<property name="url" value="oracle jdbc url" />
<property name="username" value="username" />
<property name="password" value="password" />
</bean>
<util:properties id="queryProps" location="classpath:SQLs.xml"/>
<bean id="employeeDAOProp" class="pkg.dao.EmployeeDAOImpl">
<property name="queryProps" ref="queryProps" />
</bean>
And the SQLs.xml
content is: SQLs.xml
内容是:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<entry key="getEmployee">
select * from employee;
</entry>
</properties>
The DAO class: DAO类:
public class EmployeeDAO {
private DataSource dataSource;
private Properties queryProps;
public Properties getQueryProps() {
return queryProps;
}
public void setQueryProps(Properties queryProps) {
this.queryProps = queryProps;
}
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
public Employee getEmployee(int id) {
String sql = queryProps.getProperty("getEmployee");
}
}
I am loading the context file in the Main application with: 我正在使用以下方法在Main应用程序中加载上下文文件:
ConfigurableApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
I can load the EmployeeDAO
without an issue and call on its getEmployee()
method. 我可以毫无问题地加载
EmployeeDAO
并调用其getEmployee()
方法。 Even the datasource
pulls all the needed key/values without an issue. 即使是
datasource
可以毫无问题地提取所有需要的键/值。 But the queryProps
is always null. 但是
queryProps
始终为null。
It appears that I was injecting the properties into two different instances. 看来我正在将属性注入两个不同的实例中。
<util:properties id="queryProps" location="classpath:SQLs.xml"/>
<bean id="EmployeeDAO" class="pkg.dao.EmployeeDAOImpl">
<property name="dataSource" ref="dataSource" />
<property name="queryProps" ref="queryProps" />
</bean>
Now the queryProps Property
contains the expected content from the SQLs.xml. 现在,queryProps
Property
包含SQLs.xml中的预期内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.