@Autowired
Environment env;
@Value("${jdbcConnectionString}")
private String jdbcConnectionString;上述功能在某些类中自动工作,但是在相同包中的类似类中为null,并且具有相同的注解@Configuration/@Component。
我试图找出正确的方法来理解spring在配置各种工件时所做的事情。
我可以时不时地运行一些东西,但是任何能理解魔法的好资源都会受到很好的赞赏。
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注释类
发布于 2015-12-07 22:16:45
为了自动创建bean,首先需要在上下文中定义它。
@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");
// ...
}
}发布于 2015-12-08 19:20:17
在初始化spring引导应用程序的主类中,是否有类似的配置:
@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这是一个配置类,并指示这个配置类也会触发自动配置和组件扫描(只扫描这些特定的包(a.b),并检查是否存在用于自动bean检测的注释,如:@Component, @Service, @Controller, @Repository)。在检测具有这些构造型的任何类时,spring将根据配置创建对象。在创建这些对象时,可能有一些对象具有autowired,或者可以引用在属性文件中定义的一些属性。配置@PropertySource会这样做。
@ComponentScan中的包声明应该是基本包。
https://stackoverflow.com/questions/34142077
复制相似问题