我正在用Spring编写一个java应用程序。它在xml上工作得很好,但在注释中根本没用。
这是我的片段:
@Service("oracleDB")
public class OracleDatabase implements IDatabase
{
@Value("oracle.jdbc.driver.OracleDriver")
private String driverName;
@Value("jdbc:oracle:thin:@")
private String url;
public String getDriverName()
{
return driverName;
}
}
我的ApplicationContext.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-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config />
<context:component-scan
base-package="com.pdiwt.database"></context:component-scan>
</beans>
MyInvoker就是这样:
public class MyInvoker{
public static void main(String args[]){
XmlBeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
OracleDatabase oracelDB = beanFactory.getBean("oracleDB");
System.out.println(oracleDB.getDriverName());
}
}
猜猜是什么?结果为null。有什么不对吗?
答案 0 :(得分:1)
这里的问题是使用xmlbeanfactory,这是一个常见的错误。试试这个,它会完美地运作:
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
OracleDatabase oracleDB = (OracleDatabase)context.getBean("oracleDB");
...
我认为beanfactory的功能不足以处理@Value注释。可以找到更多信息here。
答案 1 :(得分:0)
如果你已经在使用Spring,为什么你会以这种方式获得连接,而不是使用Spring的DataSources?看起来很奇怪;最坏的情况是错误的。
我将给该存储库一个JdbcTemplate。