ben*_*hby 1 java spring spring-mvc spring-ioc
我的情况非常类似于“将文件资源注入 Spring bean ”
我有一个使用一些 .jasper 编译文件的控制器,我正在声明它们
//...
@Controller
public class InvoicingController {
private Resource quoteTemplate;
...//
Run Code Online (Sandbox Code Playgroud)
在我的上下文配置文件中
<bean id="invoicingController" class="x.x.InvoicingController">
<property name="quoteTemplate" value="/WEB-INF/jasper/Quote.jasper" />
...
Run Code Online (Sandbox Code Playgroud)
我在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>
Run Code Online (Sandbox Code Playgroud)
然后@Autowire像这样 ing 依赖项
@Autowired @Qualifier("quoteTemplate") private Resource quoteTemplate;
Run Code Online (Sandbox Code Playgroud)
@Qualifier使用是因为我有多个Resource实现类声明为 bean,这确保使用正确的一个。
您不能同时使用@Controller注释和<bean>声明,除非您没有component-scan. 您将最终得到两个 bean 定义,其中最后一个将覆盖第一个。
在这种情况下,组件扫描的 bean 定义似乎排在第二位,并覆盖了您使用<bean>.
选择要使用的 bean 声明方法。
| 归档时间: |
|
| 查看次数: |
1305 次 |
| 最近记录: |