Spring @Resource处理
我在注解如@Resource
Spring bean中的字段时遇到麻烦。我有的:
用setter方法注释的字段 @Resource
@Resourceprivate URL someUrl;
public void setSomeUrl(URL someUrl) {
this.someUrl = someUrl;
}
<env-entry>
我的部署描述符(web.xml)中的标签
<env-entry> <env-entry-name>someUrl</env-entry-name>
<env-entry-type>java.net.URL</env-entry-type>
<env-entry-value>http://somedomain.net/some/path</env-entry-value>
</env-entry>
应用程序无法以开头BeanCreationException
,这是我不希望的,因为我不一定要让spring注入Spring管理的bean。我希望Spring处理@Resource
和检索JNDI资源。
这是Spring
2.5.6SEC03,并且@Service
为自动装配到其他@Component
实例中注释了bean本身。在这种情况下,Servlet容器是Tomcat
7,但最终将部署到Weblogic 10上,因此,尽管我理想地希望在两者上都能使用一种解决方案,但Weblogic是必不可少的。
我在Spring 2.5中滥用此功能吗?一般来说?我有什么想念的吗?我对JNDI有误解吗?感谢所有帮助。谢谢。
回答:
如果您使用的是Spring
Stereotype批注(@Service
,@Component
…),则可能在spring配置中包括了将<context:component-
scan
/>其拾取的元素。可以这样做,但是它会自动CommonAnnotationBeanPostProcessor
在应用程序上下文中注册a
,如该链接中第二个注释上方所述。
包含的问题CommonAnnotationBeanPostProcessor
是Spring处理@Resource
注释,并将尝试从其应用程序上下文注入bean。您可以注册自己的CommonAnnotationBeanPostProcessor
bean,并@Resource
通过将bean设置为alwaysUseJndiLookup
属性来配置bean,以指示Spring允许直接JNDI访问这些bean
true
。
<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"> <property name="alwaysUseJndiLookup" value="true"/>
</bean>
请注意链接文档中的注释:
注意:默认的CommonAnnotationBeanPostProcessor将通过“ context:annotation-config”和“
context:component-scan” XML标签进行注册。如果要指定自定义CommonAnnotationBeanPostProcessor
bean定义,请删除或关闭那里的默认注释配置!
以上是 Spring @Resource处理 的全部内容, 来源链接: utcz.com/qa/411491.html