Spring @Resource处理

我在注解如@ResourceSpring bean中的字段时遇到麻烦。我有的:

用setter方法注释的字段 @Resource

@Resource

private 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。您可以注册自己的CommonAnnotationBeanPostProcessorbean,并@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

回到顶部