• PostConstruct注解


    应用场景:当你需要往Bean里注入一个其父类中定义的属性,而你又无法复写父类的属性或属性的setter方法时

    public class UserDaoImpl extends HibernateDaoSupport implements UserDao {    
        private SessionFactory mySessionFacotry;    
        @Resource   
        public void setMySessionFacotry(SessionFactory sessionFacotry) {    
            this.mySessionFacotry = sessionFacotry;    
        }    
        @PostConstruct   
        public void injectSessionFactory() {    
            super.setSessionFactory(mySessionFacotry);    
        }    
        ...    
    }    

    这里通过@PostConstruct,为UserDaoImpl的父类里定义的一个sessionFactory私有属性,注入了我们自己定义的sessionFactory(父类的setSessionFactory方法为final,不可复写),之后我们就可以通过调用 super.getSessionFactory()来访问该属性了。

    Java源码:

    //Copyright Sun Microsystems Inc. 2004 - 2005.
    
    package javax.annotation;
    
    import java.lang.annotation.*;
    import static java.lang.annotation.ElementType.*;
    import static java.lang.annotation.RetentionPolicy.*;
    
    /**
     * The PostConstruct annotation is used on a method that needs to be executed 
     * after dependency injection is done to perform any initialization. This 
     * method MUST be invoked before the class is put into service. This 
     * annotation MUST be supported on all classes that support dependency 
     * injection. The method annotated with PostConstruct MUST be invoked even 
     * if the class does not request any resources to be injected. Only one 
     * method can be annotated with this annotation. The method on which the 
     * PostConstruct annotation is applied MUST fulfill all of the following 
     * criteria - 
    - The method MUST NOT have any parameters except in the case of EJB 
     * interceptors   in which case it takes an InvocationC    ontext object as 
     * defined by the EJB   specification.
     * - The return type of the method MUST be void.
     * - The method MUST NOT throw a checked exception.
     * - The method on which PostConstruct is applied MAY be public, protected, 
     * package private or private.
     * - The method MUST NOT be static except for the application client.
     * - The method MAY be final.
     * - If the method throws an unchecked exception the class MUST NOT be put into   
     * service except in the case of EJBs where the EJB can handle exceptions and 
     * even   recover from them.
     * @since Common Annotations 1.0
     * @see javax.annotation.PreDestroy
     * @see javax.annotation.Resource
     */
    @Documented
    @Retention (RUNTIME)
    @Target(METHOD)
    public @interface PostConstruct {
    }
  • 相关阅读:
    spring @Transactional 事务注解
    vue 父子组件的方法调用
    spring boot使用TestRestTemplate集成测试 RESTful 接口
    JS实现网站内容的禁止复制和粘贴、另存为
    vue把localhost改成ip地址无法访问—解决方法
    spring mvc spring boot 允许跨域请求 配置类
    JIRA安装过程中链接mysql的问题!
    vue开发中v-for在Eslint的规则检查下出现:Elements in iteration expect to have 'v-bind:key' directives
    Linux进程启动/指令执行方式研究
    反弹Shell原理及检测技术研究
  • 原文地址:https://www.cnblogs.com/fuyuanming/p/5748692.html
Copyright © 2020-2023  润新知