2011-11-23 31 views
1

我正在用Spring 3編寫一個Java應用程序。它與xml一起工作良好,但在註釋中完全不工作。@Spring3的值註釋在我的程序中不起作用

這裏是我的代碼片段:

@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()); 
    } 
} 

你猜怎麼着?結果爲空。有什麼不對的嗎?

+1

OracleDatabase oracelDB = beanFactory.getBean(「oraceDB」);你已經找到並糾正了這個錯字錯誤,對嗎? (bean的名字應該是oracleDB) – ruhsuzbaykus

+0

是的,bean的名字是oracleDB,我寫錯了。問題是爲什麼自動裝配不起作用?它是否與beanFactory.getBean()有關?我知道,如果我啓動由new()手動分類,自動裝配不起作用。 – Shuo

+0

「新」和自動裝配是排他性的。如果你調用「new」,這個bean不在Spring的控制之下。 – duffymo

回答

1

這裏的問題是使用xmlbeanfactory,這是一個常見的錯誤。試試這個,這將很好地工作:

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml"); 
OracleDatabase oracleDB = (OracleDatabase)context.getBean("oracleDB"); 
... 

我覺得Bean工廠根本就沒有強大到足以處理@Value註釋。更多信息可以在here找到。

+0

非常感謝!它解決了! – Shuo

0

如果你已經在使用Spring,你爲什麼會以這種方式獲得連接,而不是使用Spring的DataSources?看起來很奇怪;最壞的情況是錯誤的。

我會給這個存儲庫一個JdbcTemplate。

+0

我只是給一個簡單的檢查,我不會使用jdbctemplate。問題是爲什麼自動裝配不起作用? – Shuo

+0

如果你做得對,它就能完美運作。我不明白爲什麼JdbcTemplate會引起反感。你不會說什麼「不起作用」看起來像。我認爲bean工廠返回一個對象,但我沒有看到一個表演。編譯器是否會標記你? – duffymo

+0

讓我直說,我沒有使用jdbc,我只是舉了一個例子,說明autowring在我的情況下不起作用。如果它給出任何線索,我正在研究應用程序而不是web。在簡單情況下,也沒有例外。如果說接線一個bean並嘗試從該bean調用一個方法,則Nullpointer異常將被拋出,導致DI不起作用 – Shuo