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异常.

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

  • 相关阅读:
    【笔记】xml文件读写
    创业唯一不需要的是金钱
    关于阻焊层和助焊层的理解
    UNIX net
    一种方便调试的打印语句宏定义
    C语言指针一种容易错误使用的方法
    文件操作
    MPEG文件格式
    指针在函数间传递实质
    如何查看静态库内容 Unix/Linux
  • 原文地址:https://www.cnblogs.com/haohao111/p/11771870.html
Copyright © 2011-2022 走看看