java - Spring Controller 注入(inject)的属性变空

标签 java spring spring-mvc spring-ioc

我的情况与“Inject a file resource into Spring bean”非常相似

我有一个使用一些 .jasper 编译文件的 Controller ,我这样声明它们

//...
@Controller
public class InvoicingController {

private Resource quoteTemplate;
...//

在我的上下文配置文件中

<bean id="invoicingController" class="x.x.InvoicingController">
    <property name="quoteTemplate" value="/WEB-INF/jasper/Quote.jasper" />
...

我在 setQuoteTemplate() 函数上设置了一个断点,当我初始化容器时,它被调用,并且 Resource 对象被正确设置。然而,当我实际点击 Controller 时 quoteTemplate 为空。

我认为 Controller 是单例,除非我的理解存在差距,否则我不确定为什么当我点击 Controller 处理的 url 时,容器初始化期间设置的值会变为空。

编辑:

谢谢@Sotirios Delimanolis

我最终这样声明了 Bean:

    <bean id="quoteFile" class="java.io.File">
        <constructor-arg value="resources/jasper/Quote.jasper" />
    </bean>

    <bean id="quoteTemplate" class="org.springframework.core.io.FileSystemResource">
        <constructor-arg ref="quoteFile" />
    </bean>

然后@Autowire构建依赖项

@Autowired @Qualifier("quoteTemplate") private Resource quoteTemplate;
使用

@Qualifier 是因为我有多个声明为 beans 的 Resource 实现类,这可以确保使用正确的类。

最佳答案

您不能同时使用 @Controller注释和 <bean>声明,除非您没有 component-scan 。您最终将得到两个 bean 定义,其中最后一个将覆盖第一个。

在这种情况下,组件扫描的 bean 定义似乎排在第二位,并覆盖您使用 <bean> 创建的 bean。 .

选择您要使用的 bean 声明方法。

关于java - Spring Controller 注入(inject)的属性变空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19547621/

相关文章:

if条件下的javascript表单validation_error

java - 为什么 Maven 在生产构建中使用测试资源?

mysql - 从spring mvc的 View 中调用另一个项目的 Controller

java - 我的 Storm 拓扑既不工作(不生成输出)也不失败(不生成错误或异常)

java - Orika 嵌套映射器

java - 如何为 Hibernate 编写返回两个实体的 jSTL 代码

java - 如何配置 Spring Cache 以忽略缓存序列化错误?

java - Spring mvc 在两个或多个正斜杠后返回主页

java - 为什么这个片段抛出 NullPointerException

java - 使用 AIDL 在两个进程之间传输 Parcelable