【发布时间】:2013-10-23 16:47:41
【问题描述】:
我的情况和“Inject a file resource into Spring bean”很相似
我有一个使用一些 .jasper 编译文件的控制器,我将它们声明为这样
//...
@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 对象被正确设置。但是,当我实际点击控制器时,quoteTemplate 为空。
我理解控制器是单例的,除非我的理解存在差距,否则我不确定为什么在容器初始化期间设置的值在我点击控制器处理的 url 时变为 null。
编辑:
感谢@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>
然后@Autowireing 依赖项
@Autowired @Qualifier("quoteTemplate") private Resource quoteTemplate;
之所以使用@Qualifier,是因为我有多个Resource 实现类声明为bean,这样可以确保使用正确的类。
【问题讨论】:
标签: java spring spring-mvc spring-ioc