• 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 {
    }
  • 相关阅读:
    Linux----硬连接和软连接
    C4.5算法
    浅谈机器学习方法
    ID3算法(决策树)
    修改mysql数据库 允许远程访问
    CentOS 7安装Samba 4.6 版本步骤及错误解决方法
    CentOS安装mysql
    eclipse 安装lombok插件
    电脑忘记密码,破解方式
    mysql常用的信息查询函数
  • 原文地址:https://www.cnblogs.com/fuyuanming/p/5748692.html
Copyright © 2020-2023  润新知