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