当前位置: 首页 > 知识库问答 >
问题:

Spring注入在资源文件中找不到变量

荣声
2023-03-14

我在项目中创建了一个资源文件。我想将资源文件中的值注入到Springbean中。我在applicationcontext中定义了资源文件的占位符。xml。

<context:property-placeholder  location="file:///${MRAPOR_PROPPATH}mRapor.properties" />

我可以向applicationContext中声明的bean注入值。类似xml:

<bean
        id="dataSource"
        class="org.springframework.jndi.JndiObjectFactoryBean" >

        <property
            name="jndiName"
            value="${database.jndiName}" />

        <property
            name="lookupOnStartup"
            value="false" />

        <property
            name="cache"
            value="true" />

        <property
            name="proxyInterface"
            value="javax.sql.DataSource" />
    </bean>

这工作得很好。但是,如果我声明带有Spring注释的bean,我就不能注入值。

@Component("SecurityFilter")
public class SecurityFilter implements Filter {
    public static final String USER = "USER_SESSION_KEY";
    public static final String CENTRIFY_USERNAME_KEY = "REMOTE_USERNAME";

    @Value("${url.logout}")//I get error here !!!!
    private String logoutUrl;
    //proper setters and  getters.
}

你知道为什么我不能访问使用注释声明的bean内的值吗?

这是我的例外

weblogic.application.ModuleException: 
    at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1510)
    at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:482)
    at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:425)
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
    at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:119)
    Truncated. see log file for complete stacktrace
Caused By: java.lang.IllegalArgumentException: Could not resolve placeholder 'url.logout' in string value [${url.logout}]
    at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:173)
    at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:125)
    at org.springframework.beans.factory.config.PropertyPlaceholderConfigurer$PlaceholderResolvingStringValueResolver.resolveStringValue(PropertyPlaceholderConfigurer.java:255)
    at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:748)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:745)

共有2个答案

隆飞宇
2023-03-14

值由java编译器处理,而XML由Springbean处理器解析-这是两件截然不同的事情。。。为什么你认为应该以同样的方式工作?

编辑:我读了它,似乎实际上可以使用Spring EL,您只需使用前缀\而不是$

private @Value( "#{application.url.logout}" ) String logoutUrl;

干杯

姬安志
2023-03-14

您确定实际过滤请求的SecurityFilter实例是由Spring管理的吗?

默认情况下,过滤器在web中声明。xml是由servlet容器实例化的,因此它们不受Spring管理,Spring注释(如@Value)在其中不起作用。

然而,Spring为您的用例提供了特殊支持—您可以使用DelegatingFilterProxy将过滤委托给Spring管理的组件。在web中声明它。xml如下所示:

<filter>
    <filter-name>SecurityFilter</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>

<filter-mapping>...</filter-mapping>

DelegatingFilterProxy将请求过滤委托给名为SecurityFilter的bean(如您的组件)。

 类似资料:
  • 问题内容: 在我的Spring 3.0应用程序中,我有一些资源。在运行时,我需要其中一些作为(或其他类型)。我该如何找回它们?是否可以正常注射? 问题答案: 这是通过注释执行此操作的最简单方法:

  • 我使用SpringBootMaven插件将应用程序打包为jar文件。 它可以在Itellij IDE中找到直接运行的资源文件,但之后找不到资源文件,显示错误为: JAVA木卫一。FileNotFoundException:类路径资源[jmxremote.password]无法解析为绝对文件路径,因为它不位于文件系统:jar:file:/home/XXX/target/yyyy中。罐子/BOOT-I

  • 方法:获取 现状:404 注意:URL应该是http://localhost:8080/dragonline/resources/img/icon.png()

  • 我有一个可运行的jar文件,无法访问位于默认src目录之外的资源。根据我的理解,这两门课的区别是什么。getResource()和ClassLoader。getResource(),我应该能够访问root/res/img/img1。png(请参阅下面的文件夹设置),方法是使用以下getResourceFile函数: 文件夹设置: 当我尝试执行jar可执行文件本身时,问题就出现了。然而,奇怪的是,我

  • 当我尝试将我的maven项目部署到Glassfish 5时,我得到以下错误: [[FATAL]在索引0处找不到类型为public javax.ws.rs.core.response com.test.resources.AccountResource.AddProfilePicture(java.io.inputStream,org.glassfish.jersey.media.multipart

  • 我正在做一个项目,编译并运行我的IDE工作正常。所有资源都找到了,它正常工作。然而,当我构建我的. jar时,它能够找到一些资源,但不是全部。我的项目结构看起来是这样的: 当我运行jar文件时,它能够找到图像并使用它们,但是当我尝试访问html文件时,它不会打开。下面是jar的项目结构; 我以前从未处理过jar文件,所以这似乎是我犯的一个非常明显的错误。感谢您的帮助,谢谢! 编辑:访问找不到的文件