我有一个简单的Spring Boot
项目,其目录结构如下:
.
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ ├── example
│ │ │ │ └── base
. . │ │ ├── db
. . │ │ │ ├── entity
. . │ │ │ │ └── SomeComponent.java
. . │ │ │ ├── repository
│ │ │ └── util
│ │ └── development
│ └── MainApplication.java
└── resources
└── application.properties
MainApplication
基本上是默认值:
package com.example.base;
@SpringBootApplication
public class MainApplication {
@Autowired
private Environment env;
public static void main(String[] args) {
SpringApplication application = new SpringApplication(MainApplication.class);
application.run(args);
}
...
在MainApplication.java中,我实际上对环境有一种有效的敬意,我实际上可以正确访问它,但是我在SomeComponent.class中得到 null
package com.example.base.db.entity;
@Component
public class SomeComponent {
@Autowired
private Environment env;
public SomeComponent() {}
public void foo() {
System.out.println(env);
}
}
这应该可以正常工作,因为SomeComponent.java位于 com.example.base 的子包中,应该由默认配置@SpringBootApplication
自动扫描吗?我不明白为什么会失败。
在此先感谢,任何帮助将不胜感激
答案 0 :(得分:1)
感谢您的评论,我发现自己是个问题,我使用new(作为菜鸟错误)实例化我的组件。我将以下Bean添加到我的MainApplication.class中,一切都开始流动。
@Bean
public SomeComponent someComponent() {
return new SomeComponent();
}
当我需要它时,我只使用context.getBean(SomeComponent.class)
答案 1 :(得分:0)
Spring Boot
简化了此过程。您可以使用以下代码访问属性文件中的值:
@PropertySource(ignoreResourceNotFound = true, value = "classpath:otherprops.properties")
@Controller
public class ClassA {
@Value("${myName}")
private String name;
@RequestMapping(value = "/xyz")
@ResponseBody
public void getName(){
System.out.println(name);
}
}
查看this stackoverflow post以获取更多参考资料。