zoukankan      html  css  js  c++  java
  • spring @value 注入static 注入静态变量方法

    对于spring static变量

    下面给大家介绍spring不能注入static变量的原因,具体详情如下所示:

    Spring 依赖注入 是依赖 set方法

    set方法是 是普通的对象方法

    static变量是类的属性

    只能在setAppId方法上加注解,另外class需要加 @Component等注解,这样spring才能扫描到

    对于

    mport org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    
    @Component
    public class GlobalValue {
    
        @Value("${mysqk.db}")
        public static String DATABASE;
    
    
    }

    DATABASE的值是null

    但是静态的XXX如何注入呢?

      上网查了很多的说法,其实很简单:

    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    import lombok.Getter;
    
    @Component
    public class GlobalValue {
    
        @Getter
        public static String DATABASE;
    
        @Value("${mysql.db:test}")
        public void setDatabase(String db) {
            DATABASE = db;
        }
    
    }

    DATABASE可以获取到值

    这里要特别注意,自动生成的getter和setter方法,会带有static的限定符,需要去掉,才可以。

    ===========================================

    方式二 通过InitializingBean 

    import lombok.Getter;
    import lombok.Setter;
    import org.springframework.beans.factory.InitializingBean;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Configuration;
    /**
     * 通用配置
     *
     */
    @Configuration
    public class TestConfig implements InitializingBean {
        /**
         * 数据拼接时,数据分隔符,默认:;
         */
        @Value("${data.separator.flag:&}")
        private String separatorCon;
    	
    	/**
         * 数据拼接时,数据分隔符,默认:;
         */
        @Getter
        @Setter
        private static String separator;
    	
    	@Override
        public void afterPropertiesSet() throws Exception {
            separator = separatorCon;      
        }
    }

    ===========================================

    方式三 定义后通过注入bean

    
    @Autowired
    private TestConfig config;

     然后通过bean获取

    ===========================================

    方式四

    @PostConstruct方式实现

    import org.mongodb.morphia.AdvancedDatastore;
    import org.springframework.beans.factory.annotation.Autowired;
     
     
    @Component
    public class MongoFileOperationUtil {
        @Autowired
        private static AdvancedDatastore dsForRW;
     
        private static MongoFileOperationUtil mongoFileOperationUtil;
     
        @PostConstruct
        public void init() {
            mongoFileOperationUtil = this;
            mongoFileOperationUtil.dsForRW = this.dsForRW;
        }
     
    }

    @PostConstruct 注解的方法在加载类的构造函数之后执行,也就是在加载了构造函数之后,执行init方法;(@PreDestroy 注解定义容器销毁之前的所做的操作)
    这种方式和在xml中配置 init-method和 destory-method方法差不多,定义spring 容器在初始化bean 和容器销毁之前的所做的操作

    ======================================================================

    方式五 set方法上添加@Autowired注解,类定义上添加@Component注解;

    
    import org.mongodb.morphia.AdvancedDatastore;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
     
     
    @Component
    public class MongoFileOperationUtil {
     
        private static AdvancedDatastore dsForRW;
        
        @Autowired
        public void setDatastore(AdvancedDatastore dsForRW) {
            MongoFileOperationUtil.dsForRW = dsForRW;
        }
    

    首先Spring要能扫描到AdvancedDatastore的bean,然后通过setter方法注入;

    然后注意:成员变量上不需要再添加@Autowired注解;

    正因为当初对未来做了太多的憧憬,所以对现在的自己尤其失望。生命中曾经有过的所有灿烂,终究都需要用寂寞来偿还。
  • 相关阅读:
    西南民族大学第十二届程序设计竞赛(同步赛) A.逃出机房 (bfs)
    2020-2021 ICPC, NERC, Southern and Volga Russian Regional Contest (Online Mirror, ICPC Rules) D. Firecrackers (贪心,二分)
    2020-2021 ICPC, NERC, Southern and Volga Russian Regional Contest (Online Mirror, ICPC Rules) C. Berpizza (STL)
    2020 ICPC Asia Taipei-Hsinchu Regional Problem H Optimization for UltraNet (二分,最小生成树,dsu计数)
    2020 ICPC Asia Taipei-Hsinchu Regional Problem B Make Numbers (dfs搜索)
    Codeforces Round #689 (Div. 2, based on Zed Code Competition) E. Water Level (贪心好题)
    Codeforces Round #692 (Div. 2, based on Technocup 2021 Elimination Round 3) C. Peaceful Rooks (思维,dsu找环)
    PAT五一线上模拟测试赛
    【PAT五一线上模拟测试赛】7-3 垃圾分类 (20分) Java和Python
    【PAT五一线上模拟测试赛】7-2 三阶幸福数 (20分) Pyton+Java
  • 原文地址:https://www.cnblogs.com/candlia/p/11919951.html
Copyright © 2011-2022 走看看