关于属性注入问题

104 阅读1分钟

为什么需要属性注入

通过将类的属性以属性配置文件的形式展示易于修改。eg:server.port=8080

属性注入的三种方式

1.environment注入

#这种方式可以拿到jdk的环境变量
@Autowired
public Environment environment;

@GetMapping("/value/environment")
public Map<String, String> getValue() {
    Map<String, String> map = new HashMap<>();
    String name = environment.getProperty("alipay.name");
    String appkey = environment.getProperty("alipay.appkey");
    map.put(name, appkey);
    log.info(name, appkey);
    return map;
}

2.@value注入

@Value("${alipay.name}")
private String name;
@Value("${alipay.appkey}")
private String appkey;

@GetMapping("/value/value")
public Map<String, String> getValues() {
    Map<String, String> map = new HashMap<>();
    String name = environment.getProperty("alipay.name");
    String appkey = environment.getProperty("alipay.appkey");
    map.put(name, appkey);
    log.info(name, appkey);
    return map;
}

3.自定义属性配置类

  • 引入依赖
<!--        属性配置配的依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
  • 配置
@Configuration
@EnableConfigurationProperties(AlipayProperties.class)
public class AlipayConfiguration {
    @Bean
    public IAliPayService getAlipayServiceImpl() {
        return new AliPayServiceImpl();
    }
}
#bean文件,数据容器
@Data
@ConfigurationProperties(prefix = "alipay")
public class AlipayProperties implements Serializable {
    private String name;
    private String appkey;
}

优缺点比较

@value较常用但配置文件中属性较多时管理会很麻烦且该方式没有面向对象的思想; 自定义属性配置类可以解决以上问题且属性配置文件中可以提供自动提示功能。