`
gaojingsong
  • 浏览: 1181930 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

【@PostConstruct注解研究】

 
阅读更多

最近在研究源码的时候,碰到了一个自己没有见到的注解,经过研究发现是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的

 

分享到:
评论

相关推荐

    javax.annotation-3.1.2.2-sources.jar.zip

    1. @PostConstruct:此注解用于标记一个方法,表示该方法会在对象被创建并注入所有依赖后立即调用,用于执行初始化操作。这对于依赖注入的管理非常有用,尤其是在Spring框架中。 2. @PreDestroy:与@PostConstruct...

    基于Java的实例源码-ejbCreate函数用于初始化一个EJB实例.zip

    它在无状态和有状态会话bean中具有不同的用途,但随着EJB规范的演进,现代EJB开发更倾向于使用`@PostConstruct`注解来实现相同的功能,提供更清晰的代码结构。理解和掌握EJB的生命周期以及初始化方法对于Java EE...

    测试spring中的org.springframework.beans.factory.InitializingBean

    `InitializingBean`是Spring框架早期版本中广泛使用的初始化回调接口,虽然现在推荐使用`@PostConstruct`注解,但`InitializingBean`仍然在一些旧项目中存在。理解这个接口的工作原理以及如何正确使用它,对于深入...

    JavaEE Spring IoC注解

    5. **Method Execution**:`@PostConstruct` 和 `@PreDestroy` 注解分别标识初始化方法和销毁方法,它们会在bean生命周期的特定阶段执行。 6. **Property Injection**:`@Value` 注解可以用来注入静态值,包括字符...

    bean的生命周期分析(五)

    Spring提供了多种方式来自定义初始化过程,如实现InitializingBean接口的afterPropertiesSet()方法,或者使用@PostConstruct注解的方法。此外,还可以通过@Bean注解的initMethod属性指定初始化方法。 4. **作用域**...

    spring-demo10-注解-IOC.zip

    6. `@PostConstruct` 和 `@PreDestroy`:这两个注解标记方法在bean初始化后和销毁前执行,类似于XML配置中的 `<init-method>` 和 `<destroy-method>`。 7. `@Configuration` 和 `@Bean`:这两个注解用于替代传统的...

    基于Java的实例开发源码-ejbCreate函数用于初始化一个EJB实例.zip

    在Java企业级应用开发中,Enterprise JavaBeans (EJB) 是一种核心组件,它提供了用于构建分布式、事务处理和...通过研究这个实例,你可以更好地掌握EJB的初始化机制,并为将来处理更复杂的企业级项目打下坚实的基础。

    spring2.5源码

    8. **JSR-250规范支持**:Spring 2.5实现了JSR-250规范,提供了诸如`@PostConstruct`、`@PreDestroy`、`@Resource`等注解,使得Spring与Java EE平台的集成更加紧密。 9. **国际化和本地化**:Spring 2.5提供了对...

    springmvc+hibernate+注解

    在你研究的项目中,这些技术结合使用,实现了基于注解的灵活配置,包括增删改查和分页功能。这表明你已经掌握了Spring MVC和Hibernate的基本用法,以及如何通过注解优化代码结构和提高开发效率。在实际应用中,这些...

    spring 注解

    标题中的“Spring注解”指的是Spring框架中广泛使用的元数据注解,...通过深入研究Spring框架的源码,可以更好地理解注解的工作原理以及它们如何与Spring容器交互,这对于提升个人技术水平和解决实际问题非常有帮助。

    spring的注解方式

    Spring框架是Java开发中不可或缺的一部分,它以其强大的依赖注入(DI)和面向切面编程(AOP)功能而闻名。本教程将深入讲解Spring的注解方式,...Demo9可能包含了这些注解的示例代码,建议下载并逐一研究,以加深理解。

    spring原代码下载

    5. **JSR-250集成**:Spring 2.5集成了JSR-250规范,引入了如@PostConstruct、@PreDestroy等注解,这些注解提供了声明生命周期回调的方法。 6. **Java配置的支持**:虽然Spring 2.5并没有完全引入Java配置,但它为...

    spring2.5源码分析

    Spring 2.5开始支持JSR-250规范,引入了如`@PostConstruct`、`@PreDestroy`、`@Resource`等注解,增强了与Java EE的兼容性。 8. **容器改进** Spring 2.5的IoC容器进行了优化,提高了性能,并支持XML配置的简化,...

    Spring2(源码)

    - 开发者可以通过实现InitializingBean接口的afterPropertiesSet()方法或使用@PostConstruct注解定义初始化逻辑,通过DisposableBean接口的destroy()方法或@PreDestroy注解定义销毁逻辑。 4. **IoC容器** - IoC...

    Spring Annotation简介一

    5. **生命周期注解**:如`@PostConstruct`和`@PreDestroy`,分别标记在初始化和销毁bean的方法上,使开发者能自定义bean的生命周期行为。 6. **AOP注解**:Spring的面向切面编程(AOP)也支持注解,如`@Aspect`定义...

    SpringDemo02.zip

    Spring框架是Java开发中广泛应用的一个开源框架,以其强大的依赖...通过研究这个压缩包中的代码和配置,你可以深入理解Spring的依赖注入、面向切面编程以及Bean的管理,为成为一名熟练的Spring开发者打下坚实的基础。

    spring 源码

    - 可以通过实现InitializingBean、DisposableBean接口或使用@PostConstruct、@PreDestroy注解来干预生命周期方法。 - 通过BeanDefinition可以自定义bean的行为,如scope(单例或多例)、lazy-init(延迟加载)等。...

    springframework2.5源代码

    7. **JSR-250规范支持**:Spring 2.5开始支持JSR-250规范,例如@PostConstruct和@PreDestroy注解,用于标记初始化和销毁方法。 8. **Spring Expression Language (SpEL)**:这是一个强大的表达式语言,用于在运行时...

    spring加载

    3. **初始化回调**:Spring调用bean的初始化方法(@PostConstruct注解的方法或init-method属性指定的方法)。 4. **正常使用**:bean现在可以被应用程序使用了。 5. **销毁回调**:当容器关闭时,Spring会调用bean的...

Global site tag (gtag.js) - Google Analytics