zoukankan      html  css  js  c++  java
  • java使用@PostConstruct注解解决初始化class调用

    程序使用到一个场景:我有一个execute.class。但是调用它之前需要去数据库获取一些必要的配置项,且无需多次查询(即初始化class前调用一次即可)。后来发现这个注解,惊为**

      注解说明:@PostConstruct该注解被用来修饰一个非静态的void()方法。被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。

    代码:

    package com.example.demo.controller.taskexecute;
    
    import com.example.demo.service.ConfigService;
    import org.apache.commons.lang.StringUtils;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    
    import javax.annotation.PostConstruct;
    
    /**
     * @Author Ctrl`
     * @Since 2019/10/31.
     */
    @Component
    public class SpiderExecute {
        public static SpiderExecute spiderExecute;
        private final Logger log = LoggerFactory.getLogger(SpiderExecute.class);
    
        @Autowired
        ConfigService configService;
    
        /**
         * 初始化当前类方法
         * @PostConstruct 便于直接加载注入类
         */
        @PostConstruct
        public void init() {
            spiderExecute = this;
            log.info("execute init.");
            spiderExecute.configService = this.configService;
        }
    

    因为该类是执行类,没有使用@Controller注解。这样@Autowired就无法自动注入service了。直接调用会抛NullPointException异常.

    于是使用该注解解决了问题。

  • 相关阅读:
    C# 填充客户端提交的值到T对象
    mvc中hangfire全局简单配置
    mvc企业微信开发全局配置
    js获取简单表单对象(1)
    MVC伪静态路由简单搭配
    [转]一些实用的图表Chart制作工具
    【转】SQL Server 数据库内部版本号
    SVN的搭建和使用总结
    解决ext时间插件在谷歌下变宽的BUG
    Hibernate中Session.get()/load()之区别
  • 原文地址:https://www.cnblogs.com/haohao111/p/11771870.html
Copyright © 2011-2022 走看看