@Autowired
Environment env;
@Value("${jdbcConnectionString}")
private String jdbcConnectionString;
上述内容在某些类中自动生成,但在相同包中的相似类中使用相同的注释@Configuration/@Component
时为null。
我正在尝试找出正确的方法来理解弹簧在配置各种工件时的作用。
我能够时不时地运行东西,但是理解魔法的任何好资源都很受欢迎。
PS。我现在只对基于java-config的方法感兴趣。
工作:
package a.b.c;
@Configuration
public class AppConfig {
@Autowired
Environment env;
package a.b.d;
@Configuration
@EnableBatchProcessing
public class JobConfiguration {
@Autowired
private Environment env;
package a.b.L;
public class BatchJobListener implements Ordered, JobExecutionListener {
@Autowired
public Environment env;
不在内部工作
package a.b.u
尝试用@ Component / @Configuration
注释类答案 0 :(得分:0)
为了自动装配bean,首先需要在Context中定义它。
@Configuration
public class ConfigOne {
@Bean
public String myBean(){
return "my bean";
}
}
要注入的bean和注入bean的bean需要在同一个上下文中。你可以用:
JavaConfigApplicationContext context =
new JavaConfigApplicationContext(ConfigOne.class, ConfigTwo.class);
或者您可以使用@import将一个配置类导入另一个配置类。
@Configuration
@Import(ConfigTwo.class)
public class ConfigOne {
<强>更新强>
我的意思是,你可能没有以环形方式进行配置。因此,您注入环境的所有bean都不在同一个环境中。
但是,如果你已经很好地配置了一切,那么在环境之前可能会加载一些类。在这种情况下,您可以使用 EnvironmentAware
@Configuration
@PropertySource("classpath:myProperties.properties")
public class MyConfiguration implements EnvironmentAware {
private Environment environment;
@Override
public void setEnvironment(final Environment environment) {
this.environment = environment;
}
public void myMethod() {
final String myPropertyValue = environment.getProperty("myProperty");
// ...
}
}
答案 1 :(得分:0)
在初始化spring boot应用程序的主类中,您是否有类似的配置:
printf
这基本上是做什么的,它告诉spring这是一个配置类,并指示这个配置类它还触发自动配置和组件扫描(只扫描这些特定的包(ab)并检查是否有任何注释用于自动bean检测,如:@Configuration
@SpringBootApplication
@EnableAutoConfiguration
@ComponentScan("a.b") //Note that this scans the components where you have configured spring container backed objects
@PropertySource({
"classpath:someProperty1.properties",
"classpath:someProperty2.properties"
})
public class Main{
public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}
}
)。在检测到具有这些构造型的任何类时,spring将根据配置创建对象。在创建这些对象时,可能有@Component, @Service, @Controller, @Repository
个对象,或者可以引用属性文件中定义的某些属性。配置autowired
执行此操作。
@PropertySource
中的包声明应该是基础包。