将文件资源注入Spring bean
问题内容:
将一些文件资源注入Spring bean的好方法是什么?现在我自动连接ServletContext并使用如下。在Spring MVC中,这样做是否更优雅?
@Controller
public class SomeController {
@Autowired
private ServletContext servletContext;
@RequestMapping("/texts")
public ModelAndView texts() {
InputStream in = servletContext.getResourceAsStream("/WEB-INF/file.txt");
// ...
}
}
问题答案:
像这样:
@Controller
public class SomeController {
private Resource resource;
public void setResource(Resource resource) {
this.resource = resource;
}
@RequestMapping("/texts")
public ModelAndView texts() {
InputStream in = resource.getInputStream();
// ...
in.close();
}
}
在您的bean定义中:
<bean id="..." class="x.y.SomeController">
<property name="resource" value="/WEB-INF/file.txt"/>
</bean>
这将创建一个ServletContextResource
使用/WEB-INF/file.txt
路径,并将其注入到您的控制器中。
注意,使用这种技术不能使用组件扫描来检测控制器,您需要一个显式的bean定义。