当前位置: 首页 > 面试题库 >

在春季获取FileNotFoundException

阴靖
2023-03-14
问题内容

我想使用BeanFactory创建bean,但是我得到了一个感悟:java.io.FileNotFoundException: \\WEB- INF\businesscaliber-servlet.xml

Resource res = new FileSystemResource("//WEB-INF//businesscaliber-servlet.xml");
BeanFactory factory = new XmlBeanFactory(res);
if (factory != null && beanId != null) {
    obj = factory.getBean(beanId);
}

他使用这个

ApplicationContext ctx = new FileSystemXmlApplicationContext(“ classpath *:/
WEB-INF / businesscaliber-servlet.xml”);


问题答案:

我相信您需要指定一个绝对路径,而不是Web应用程序的相对路径FileSystemResource

尝试ServletContextResource改为使用。

ResourceServletContext资源的实现 ,解释Web应用程序根目录内的相对路径。

唯一的问题是您需ServletContext要这样做:

ServletContext servletContext = ...
Resource res = new ServletContextResource(servletContext,
  "/WEB-INF/businesscaliber-servlet.xml");
BeanFactory factory = new XmlBeanFactory(res);
if (factory != null && beanId != null) {
    obj = factory.getBean(beanId);
}

值得注意的是,理想情况下,您将从中检索到此内容ApplicationContext。从4.4资源加载了的春天参考:

Resource template = ctx.getResource("some/resource/path/myTemplate.txt);

将返回的是 ClassPathResource; 如果针对FileSystemXmlApplicationContext
实例执行了相同的方法,则将 返回 FileSystemResource。对于
WebApplicationContext,您将获得ServletContextResource,依此类推。

这样,您可以以适合特定应用程序上下文的方式加载资源。

因此,这是检索资源的首选方法。

或者,因为从/WEB- INF/技术上讲,它在类路径中,所以您可以使用classpath:前缀(根据您的评论)或使用ClassPathXmlApplicationContext(将自动返回类路径资源)。

另外,也不需要加双斜杠。不知道为什么要这样做。也许有必要用双反斜杠保持住?



 类似资料:
  • 问题内容: 我想使用BeanFactory创建bean,但是我得到了一个感悟:。 他使用这个 ApplicationContext ctx = new FileSystemXmlApplicationContext(“ classpath *:/ WEB-INF / businesscaliber-servlet.xml”); 问题答案: 我相信您需要指定一个绝对路径,而不是Web应用程序的相对路

  • 问题内容: 简短的问题: 如果我有可以继承FactoryBean接口的类,那么如何从FactoryBean对象本身而不是FactoryBean.getObject()获得数据? 长问题: 我必须使用基于第三方Spring的库,而该库几乎不使用FactoryBean接口。现在,我总是必须配置2个bean: 实际上,名称为“ XYZ”(与“ XYZ2”比较)的bean的定义永远不会更改,但是由于工厂性

  • 问题内容: 我有一个Java应用程序,它从主类开始(不是Spring Boot应用程序)。而且我想使用Spring retry在连接丢失时重试。据我所知,我需要在Spring应用程序的主类之上添加@EnableRetry批注,然后在我的方法之上使用@Retryable进行重试。但是我认为这在非​​Spring应用程序中将不起作用。是否可以在简单的Java应用程序(而非spring应用程序)中使用s

  • 问题内容: 我目前正在尝试使用Jersey 创建一个,但无法让Jersey接它。 除了在实现中使用批注之外,我找不到任何实际用法示例,甚至找不到如何使用它。看似写在泽西岛上的人在某些帖子中暗示这足以使它被拾起。 我需要指定一些SPI服务文件,还是将其添加到某个工厂的某个地方? 注意:我正在Glassfish 3.1中运行,并使用Spring 3.1。Spring可能会以某种方式接管s 的自动加载似

  • 问题内容: 我如何让Spring从中加载Hibernate的属性? 我们正在使用Spring和JPA(以Hibernate作为实现)。Spring 指定了JPA语言和Hibernate属性: 在这种配置中,Spring通过applicationContext.xml读取所有的Hibernate属性。当我创建一个(位于我的类路径的根目录,与META- INF处于同一级别)时,Hibernate根本不

  • 问题内容: 有人可以用简单的术语解释ProxyFactoryBean吗? 我看到很多地方都引用了它。 问题答案: 用于将拦截器逻辑应用于现有目标Bean,以便在调用该Bean上的方法时,拦截器在该方法调用之前和之后执行。这是面向方面的编程(AOP)的示例。 最好用一个简单的例子来解释。AOP的经典用例是将缓存应用于方法调用的结果。可以使用以下方式进行连接: 我们有一个类型为bean 的类型,它实现