1、方式一:
配置类代码:
@Data
@ConfigurationProperties(value = TestAConfig.prefix)
public class TestAConfig {
public static final String prefix = "school.grade";
private String name;
private String age;
private String weight;
}
从配置文件读取配置,此时这个类没有被spring管理,其他类不能使用@Autowired方式注入这个配置类
使用类代码:
@Component
@Slf4j
@EnableConfigurationProperties(TestAConfig.class)
public class UserA {
@Autowired
private TestAConfig config;
}
@Component
@Slf4j
public class UserB {
@Autowired
private TestAConfig config;
}
UserA类上使用了@Component注解,表明该类要被spring容器管理,成为了一个bean;使用了@EnableConfigurationProperties注解,表明使TestAConfig类成为被spring容器管理的bean。
提问:为什么UserB类不需要使用@EnableConfigurationProperties注解就能直接注入TestAConfig类?
回答:因为UserA类已经使TestAConfig类成为一个bean了,UserB类可以使用@Autowired方式使用TestAConfig类。但要保证UserA类被加载切UserA类的加载顺序在UserB类之前。
2、方式二:
配置类代码:
@Data
@Configuration
@ConfigurationProperties(value = TestAConfig.prefix)
public class TestAConfig {
public static final String prefix = "school.grade";
private String name;
private String age;
private String weight;
}
从配置文件读取配置,此时配置类上使用了@Configuration注解,该注解会使TestAConfig类成为一个bean,被spring容器管理,所以使用TestAConfig类的类,可以直接使用@Autowired方式注入。
使用类代码:
@Component
@Slf4j
public class UserB {
@Autowired
private TestAConfig config;
}
使用类也不需要加@EnableConfigurationProperties注解。
3、方式三:构造方法注入配置类
配置类代码:
@Data
@Configuration
@ConfigurationProperties(value = TestAConfig.prefix)
public class TestAConfig {
public static final String prefix = "school.grade";
private String name;
private String age;
private String weight;
}
使用类代码:
@Component
@Slf4j
public class UserA {
private TestAConfig config;
public UserA(@Autowired TestAConfig aconfig){
this.config = aconfig;
}
}
因为配置类使用了@Configuration注解,所以TestAConfig是一个被spring容器管理的类;所以在使用类UserA中可以直接赋值。