欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【@PostConstruct注解研究】

程序员文章站 2022-03-25 15:33:08
...

最近在研究源码的时候,碰到了一个自己没有见到的注解,经过研究发现是Java自己的注解,具体代码如下:

public class MasterServer implements IStoppable {

    /**

     * master server startup, not use web service

     *

     * @param args arguments

     */

    public static void main(String[] args) {

        Thread.currentThread().setName(Constants.THREAD_NAME_MASTER_SERVER);

        new SpringApplicationBuilder(MasterServer.class).web(WebApplicationType.NONE).run(args);

    }

 

    /**

     * run master server

     */

    @PostConstruct

    public void run() {

        // init remoting server

        NettyServerConfig serverConfig = new NettyServerConfig();

        serverConfig.setListenPort(masterConfig.getListenPort());

        this.nettyRemotingServer = new NettyRemotingServer(serverConfig);

        this.nettyRemotingServer.registerProcessor(CommandType.TASK_EXECUTE_RESPONSE, new TaskResponseProcessor());

        this.nettyRemotingServer.registerProcessor(CommandType.TASK_EXECUTE_ACK, new TaskAckProcessor());

        this.nettyRemotingServer.registerProcessor(CommandType.TASK_KILL_RESPONSE, new TaskKillResponseProcessor());

        this.nettyRemotingServer.start();

 

    }

 

 

 

 

 

@PostConstruct是Java自己的注解。

Java中该注解的说明:@PostConstruct该注解被用来修饰一个非静态的void()方法。

被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。

PostConstruct在构造函数之后执行,init()方法之前执行。

通常我们会是在Spring框架中使用到@PostConstruct注解 该注解的方法在整个Bean初始化中的执行顺序:

Constructor(构造方法) -> @Autowired(依赖注入) -> @PostConstruct(注释的方法)

 

从Java EE5规范开始,Servlet中增加了两个影响Servlet生命周期的注解,

@PostConstruct和@PreDestroy,这两个注解被用来修饰一个非静态的void()方法。写法有如下两种方式:

 

@PostConstruct

public void someMethod(){}

 

或者

public @PostConstruct void someMethod(){}

 

被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。

PostConstruct在构造函数之后执行,init()方法之前执行。

PreDestroy()方法在destroy()方法知性之后执行

 

PostConstruct注释规则

 

1. 除了拦截器这个特殊情况以外,其他情况都不允许有参数,否则spring框架会报IllegalStateException;而且返回值要是void,

但实际也可以有返回值,至少不会报错,只会忽略

 

2. 方法随便你用什么权限来修饰,public、protected、private都可以,反正功能是由反射来实现

 

3. 方法不可以是static的,但可以是final的