Spring3中的@Value注释在我的程序中不起作用

时间:2011-11-23 08:03:41

标签: java spring annotations

我正在用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。有什么不对吗?

2 个答案:

答案 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。