In my Spring application, I have a simple properties file located in folder WEB-INF\classes
so that it, the DispatcherServlet
and various other config files are in the classpath
.
The props file is defined in the DispatcherServlet
as:
<bean id="propertiesFactory" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="location">
<value>/WEB-INF/classes/library.properties</value>
</property>
</bean>
The propertiesFactory
bean is injected into a controller:
@Autowired
private Properties propertiesFactory;
And used in a one of the controller's methods as:
if (adminPassword.equals(propertiesFactory.getProperty("adminPassword"))) {
This all works perfectly, except for a test program as follows which has line:
ConfigurableApplicationContext context = new ClassPathXmlApplicationContext("library-servlet.xml");
Which throws a BeanCreationException
:
Injection of autowired dependencies failed
Because of:
java.io.FileNotFoundException: class path resource [WEB-INF/classes/library.properties] cannot be opened because it does not exist
But if the whole application can see the props file, why not this one program?
Everything in
WEB-INF/classes
is added to the root of the classpath. As such, you need to refer to your resource simply asor better yet
in
You may find it useful to run
and see what was used as classpath entries.