zoukankan      html  css  js  c++  java
  • 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 {
    }
  • 相关阅读:
    python笔记26(正则表达式、re模块)
    python笔记24(回顾、复习)
    python笔记25(正则表达式课程一)
    python笔记23(面向对象课程五)
    python(leetcode)-1.两数之和
    python(leetcode)-283移动零
    python(leetcode)-66加一问题
    python(leetcode)-350两个数组的交集
    python(leetcode)-136只出现一次的数字
    python数据结构-数组/列表/栈/队列及实现
  • 原文地址:https://www.cnblogs.com/fuyuanming/p/5748692.html
Copyright © 2011-2022 走看看