Java Spring@Resource处理

Java Spring@Resource处理,java,spring,tomcat,weblogic,jndi,Java,Spring,Tomcat,Weblogic,Jndi,Springbean中注释为@Resource的字段有问题。我所拥有的: 带有setter方法的字段,注释为@Resource @Resource private URL someUrl; public void setSomeUrl(URL someUrl) { this.someUrl = someUrl; } 部署描述符(web.xml)中的标记 某物 java.net.URL http://somedomain.net/some/path 应用程序无法以BeanCreat

Springbean中注释为
@Resource
的字段有问题。我所拥有的:

带有setter方法的字段,注释为
@Resource

@Resource
private URL someUrl;

public void setSomeUrl(URL someUrl) {
    this.someUrl = someUrl;
}
部署描述符(web.xml)中的
标记


某物
java.net.URL
http://somedomain.net/some/path
应用程序无法以
BeanCreationException
启动,我不希望这样,因为我不一定希望spring注入spring管理的bean。我希望Spring处理
@Resource
并检索JNDI资源

这是Spring 2.5.6SEC03,bean本身被注释为
@Service
,用于自动连接到其他
@Component
实例中。本例中的Servlet容器是Tomcat 7,但最终将部署到Weblogic 10上,因此,虽然我希望理想的解决方案能够同时适用于这两种情况,但Weblogic是必须具备的


我是否在Spring2.5中滥用了此功能?一般来说有什么我不知道的吗?关于JNDI我有什么误解吗?感谢所有的帮助。谢谢。

如果您使用的是Spring原型注释(
@Service
@Component
…),那么您可能在Spring配置中包含了
元素来提取它们。可以这样做,但它会自动向应用程序上下文注册

包含
CommonAnnotationBeanPostProcessor
的问题是Spring处理
@Resource
注释,并将尝试从其应用程序上下文注入bean。您可以注册自己的
CommonAnnotationBeanPostProcessor
bean,并通过将
alwaysUseJndiLookup
属性设置为
true
来配置bean,从而告诉Spring允许JNDI直接访问这些
@资源

<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor">
  <property name="alwaysUseJndiLookup" value="true"/>
</bean>

请注意链接文档中的注释:

注意:默认的CommonAnnotationBeanPostProcessor将由“context:annotation config”和“context:component scan”XML标记注册。如果要指定自定义CommonAnnotationBeanPostProcessor bean定义,请删除或关闭此处的默认注释配置


太好了,这完全奏效了!我还发现,通过在注释主体中为“mappedName”指定一个值,可以强制CommonAnnotationBeanPostProcessor执行JNDI查找。综上所述,在完成这项工作之后,我了解到我们的标准公司部署流程不支持多个部署描述符。我应该在所有部署中使用同一个。所以,这种方法行不通。
<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor">
  <property name="alwaysUseJndiLookup" value="true"/>
</bean>