我剛剛從這篇文章(http://www.infoq.com/articles/spring-2.5-part-1)瞭解@Resource
註釋,並希望利用它在Tomcat 6.0.26和3.0.3春季數據源不注入@Resource註釋字段alwaysUseJndiLookup設置
但它確實不工作 - 字段ds
在Users
類沒有初始化,我有NullPointerException
當我嘗試進行查詢。
文件src/org/example/db/Users.java
package org.example.db;
import javax.sql.DataSource;
import javax.annotation.Resource;
@Repository
public class Users {
@Resource private DataSource ds;
...
}
文件WEB-INF/spring-servlet.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jee="http://www.springframework.org/schema/jee"
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/jee
http://www.springframework.org/schema/jee/spring-jee-2.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package="org.example.web.controller,org.example.db" />
<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor">
<property name="alwaysUseJndiLookup" value="true" />
</bean>
<jee:jndi-lookup id="ds" jndi-name="java:comp/env/jdbc/mydb" />
</beans>
文件WEB-INF/web.xml
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/mydb</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
在日誌文件:
DEBUG 2010-09-27 21:56:00,085: Creating shared instance of singleton bean 'ds'
DEBUG 2010-09-27 21:56:00,085: Creating instance of bean 'ds'
DEBUG 2010-09-27 21:56:00,086: Eagerly caching bean 'ds' to allow for resolving potential circular references
DEBUG 2010-09-27 21:56:00,106: Invoking afterPropertiesSet() on bean with name 'ds'
DEBUG 2010-09-27 21:56:00,116: Finished creating instance of bean 'ds'
DEBUG 2010-09-27 21:56:00,149: Found injected element on class [org.example.db.Users]: ResourceElement for private javax.sql.DataSource org.example.db.Users.ds
DEBUG 2010-09-27 21:56:00,152: Found injected element on class [org.example.db.Users]: ResourceElement for private javax.sql.DataSource org.example.db.Users.ds
DEBUG 2010-09-27 21:56:00,161: Processing injected method of bean 'users': ResourceElement for private javax.sql.DataSource org.example.db.Users.ds
DEBUG 2010-09-27 21:56:00,163: Returning cached instance of singleton bean 'ds'
DEBUG 2010-09-27 21:56:00,442: Returning cached instance of singleton bean 'ds'
DEBUG 2010-09-27 21:56:00,593: Rejected bean name 'ds': no URL paths identified
DEBUG 2010-09-27 21:56:00,738: Rejected bean name 'ds': no URL paths identified
我不知道爲什麼它不起作用。
注:默認CommonAnnotationBeanPostProcessor會將由註冊「背景:註解配置」和「上下文:組件掃描」 XML標籤我documentation這個發現。如果您打算指定自定義的CommonAnnotationBeanPostProcessor bean定義,請在那裏刪除或關閉默認的註釋配置!
我認爲這可能是關於我的問題,但在這種情況下,我不知道如何「刪除或關閉默認註釋配置」。
請幫忙。 在此先感謝!
我不確定這會解決你的問題,你可以嘗試將'ds'改爲someting,someting more 2 char? – 2010-09-27 15:29:47
@Jaydeep:謝謝。不,沒有任何改變,因爲我將變量從ds更名爲dataSource。 – 2010-09-27 16:46:47