美文网首页
springboot解决静态属性注入问题

springboot解决静态属性注入问题

作者: 吟风者 | 来源:发表于2019-12-05 15:51 被阅读0次
    • 第一种方式

    通过springboot组件初始化生命周期进行属性(对象)赋值

    @Component
    public class DSHWechatApiUtil extends DSHBaseController {
    
        @Autowired
        private IThirdPartyAuthDao thirdPartyAuthDao;
    
        private static IThirdPartyAuthDao staticThirdPartyAuthDao;
        
        @PostConstruct
        public void init() {
            staticThirdPartyAuthDao = thirdPartyAuthDao;
        }
    
        public static JSONObject getAuthorizerToken(String componentAccessToken, String authorizerAppid, String authorizerRefreshToken) {
            JSONObject returnObject = new JSONObject();
            try {
                if (DSHUtils.isEmpty(componentAccessToken)) {
                    componentAccessToken = staticThirdPartyAuthDao.selectWechatValue(DSHConstants.WECHAT_PARAMS.COMPONENT_ACCESS_TOKEN);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return returnObject;
        }
    }
    
    

    可以看到,当DSHWechatApiUtil工具类组件进行初始化时,调用@PostConstruct注解标注的方法,对静态变量进行了赋值。

    • 第二种方式

    通过@Value()注解

    @Value()注解不会对静态变量进行属性注入,通过第一种方式的思维,那么我们肯定得想个办法,在这个组件初始化时也来赋值。
    第一种方式肯定也是可以的,先写一个属性,然后通过@Value()注解对这个属性进行赋值,最后通过@PostConstruct注解方式赋值给静态属性。

    这里我们要采用另一个方式,这里的方式是通过set方法来赋值。属性是static修饰的,get方法也是static修饰的,但是set方法不能是static修饰,使用@Value()注解来修饰set方法。

    image

    这样就能成功注入。

    • 第三种方式

    第三种方式和第二种差不多,

    
    @ConfigurationProperties(prefix = ProjectConfig.PROJECT_PREFIX)
    public class ProjectConfig {
        public static final String PROJECT_PREFIX = "project";
        /**
         * 系统版本号
         */
        private String version;
    
        /**
         * 项目名称
         */
        private String name;
    
        /**
         * 版权年份
         */
        private String copyrightYear;
        /**
         * 实例演示开关
         */
        private static boolean demoEnabled;
        /**
         * 获取地址ip开关
         */
        private static boolean addressEnabled;
    
        public String getVersion() {
            return version;
        }
    
        public void setVersion(String version) {
            this.version = version;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getCopyrightYear() {
            return copyrightYear;
        }
    
        public void setCopyrightYear(String copyrightYear) {
            this.copyrightYear = copyrightYear;
        }
    
        public boolean isDemoEnabled() {
            return demoEnabled;
        }
    
        public void setDemoEnabled(boolean demoEnabled) {
            ProjectConfig.demoEnabled = demoEnabled;
        }
    
        public static boolean isAddressEnabled() {
            return addressEnabled;
        }
    
        public void setAddressEnabled(boolean addressEnabled) {
            ProjectConfig.addressEnabled = addressEnabled;
        }
    }
    

    如上述代码,只要把set方法设置为非静态,那么这个配置类的静态属性就能成功注入了。

    相关文章

      网友评论

          本文标题:springboot解决静态属性注入问题

          本文链接:https://www.haomeiwen.com/subject/hngdgctx.html