33

There is a property of type Resource in my Spring 3 bean that should be injected with a reference to a file in the classpath. I use the @Value annotation as below to hopefully achieve this.

public class TestBean
{
    @Value("classpath:/abc/student/test.sql")
    private Resource SqlFile;
    ...
}

But the property is always null. I have confirmed that the sql file has been deployed in the maven target directory (it is at target/classes/abc/student/test.sql).

The closest solutions that I could google were this and this which detail the xml way whereas I am interested in doing this using annotations.

Appreciate any pointers on what could be wrong here.

Thanks,

Vijay

Community
  • 1
  • 1
Babu Subburathinam
  • 2,414
  • 2
  • 22
  • 20

2 Answers2

47

If it's going to be hard-coded like that, then just

private Resource sqlFile = new ClassPathResource("/abc/student/test.sql");

Otherwise, what you're really after is

@Value("${some.property}")
private Resource sqlFile;

and I believe that in injecting the property value, the correct PropertyEditor will be applied.

Ryan Stewart
  • 120,981
  • 20
  • 172
  • 194
3

If you don't want to specify a property then this should work

@Value("${:classpath:json/inventory.json}")
Resource inventory;
deFreitas
  • 3,712
  • 2
  • 31
  • 41