• @Value的注入与静态注入 与 组件中静态工具类的注入


    一、@Value 的注入

    首先时一般的注入,例如你的配置文件中:

    vod: 
      access-key: 123456
    
    • 1
    • 2

    那么,你就可以在你的方法中进行注入:

    @Component
    public class VodService{
    	@Value("${vod.access-key}")
    	private String accessKey;
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5

    不过这里要注意一点,如果不加${}的话,注入的就是引号中的字符串

    二、@Value 的静态属性注入

    1. @Component 搭配 @Value + set方法

    @Component
    public class VodService{
    	
    	private static String accessKey;
    	
    	@Value("${vod.access-key}")
    	public void setAccessKey(String accessKey){
    		VodService.accessKey = accessKey;
    	}
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2. @ConfigurationProperties + @Component + set方法

    与上一个方法类似,只是可以能够让你在要注入的属性多时,少写点代码
    prex 指明前缀vod,后面的accessKey 要注意配置文件与该属性保持一致

    @ConfigurationProperties(prex = "vod")
    @Component
    public class VodService{
    	
    	private static String accessKey;
    	
    	public void setAccessKey(String accessKey){
    		VodService.accessKey = accessKey;
    	}
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    3. @PostConstruct + @Component 方法

    假如你已经可以拿到了A对象中的属性(@Value注入),你可以同步将其注入到B类,或 初始化C类
    类初始化的调用顺序为:Constructor -> @Autowired -> @Value -> @PostConstruct

    @Component
    public Class A{
    	@Value("${vod.a}")
    	private String a;
    	
    	@PostConstruct
    	public void initVod(){
    		VodService.init(a);
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    public class VodService{
    	
    	private static String accessKey;
    	
    	public static init(String accessKey){
    		VodService.accessKey = accessKey;
    	}
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    三、common组件中(无启动类)中的静态注入

    与前文中使用@PostConstruct类似

    @Component
    public class YourApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
    
        @Override
        public void initialize(ConfigurableApplicationContext applicationContext) {
            // 读取配置文件中的参数
            Environment env = applicationContext.getEnvironment();
            String accessKey = env.getProperty("vod.access-key");
            String secretKey = env.getProperty("vod.secret-key");
    
            // 初始化静态字段
            VodUtil.init(accessKey, secretKey);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    resource目录下的 META-INF/spring.factories 文件

    org.springframework.context.ApplicationContextInitializer=com.example.YourApplicationContextInitializer
    
    • 1
  • 相关阅读:
    Minecraft 1.16.5模组开发(五十三) 多种生物类型(Variant)
    Docker-Compose
    Android 使用Camera2 API 和 GLSurfaceView实现相机预览
    Unity IL2CPP 游戏分析入门
    day01 mybatis
    pandas创建及读取excel文件
    经典算法之冒泡排序(Bubble Sort)
    【Java 面试题】经典 Java 面试题 200 问(上)
    数据处理技巧(7):MATLAB 读取数字字符串混杂的文本文件txt中的数据
    C/C++ Linux 开发环境
  • 原文地址:https://blog.csdn.net/qq_45949914/article/details/132701361