我在Spring 3.2.4上有Spring MVC Web应用程序。 我有2个背景。 1. mvc-dispatcher-servlet.xml如下所示:
<context:annotation-config/>
<context:component-scan base-package="com.ja.dom"/>
<!-- Tiles 3 config -->
<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<!--Don't add suffix or prefix like you do with .jsp files-->
<property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView"/>
</bean>
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer" >
<property name="definitions">
<value>/WEB-INF/tiles.xml</value>
</property>
</bean>
和2. root-context.xml如下:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations" value="classpath:prop.properties"/>
</bean>
<!-- Mail Sender Bean -->
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="smtp.gmail.com" />
<property name="port" value="587" />
<property name="username" value="${email.name}" />
<property name="password" value="${email.password}" />
<property name="defaultEncoding" value="UTF-8"/>
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.starttls.enable">true</prop>
<prop key="mail.debug">true</prop>
</props>
</property>
</bean>
当我运行应用程序时,我看到只有mailSender bean有来自属性文件的参数。 我的其他豆类等@Service ..不能注入。怎么了? 如何将我的PropertyPlaceholderConfigurer共享到mvc-dispatcher-servlet上下文?
我在服务上注入了这样的属性:
@Value( “$ {reCaptcha.private.key}”) private String reCaptchaPrivateKey;
和我的web.xml (更新)
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>Spring MVC Application</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--<init-param>-->
<!--<param-name>contextConfigLocation</param-name>-->
<!--<param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value>-->
<!--</init-param>-->
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
答案 0 :(得分:1)
我认为问题在于
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations" value="classpath:prop.properties"/>
</bean>
相反,您应该使用PropertySourcesPlaceholderConfigurer
<context:property-placeholder location="classpath:prop.properties" />
哪个
从Spring 3.1开始,XML将不会 更长时间注册旧的PropertyPlaceholderConfigurer但新注册 介绍了PropertySourcesPlaceholderConfigurer。这个替代品 创建的类更灵活,更好地与之交互 新引入的环境和物业资源机制;这应该 被视为3.1申请的标准。