@PostConstruct

  |   0 评论   |   1,364 浏览

    最近在公司项目中碰到了@PostConstruct这个注解,不解其意,查阅了下,总结如下:

    1、从Java EE5规范开始,Servlet中增加了两个影响Servlet生命周期的注解,@PostConstruct和@PreDestroy,这两个注解被用来修饰一个非静态的void()方法。写法有如下两种方式:

    @PostConstruct

    public void someMethod(){}

    或者

    public @PostConstruct void someMethod(){}

    被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。PreDestroy()方法在destroy()方法知性之后执行

    a9e9ba6bca824b68a24aba8b6ac3e5b1-image.png

    @Service
    public class BeanA {
    
        @Autowired
        private BeanB beanB;
    
        public BeanA() {
            System.out.println("这是Bean A 的构造方法");
        }
    
        @PostConstruct
        private void init() {
            System.out.println("这是BeanA的 init 方法");
            beanB.testB();
        }
    }
    
    @Service
    public class BeanB {
    
        @PostConstruct
        private void init() {
            System.out.println("这是BeanB 的init 方法");
        }
    
        public BeanB() {
            System.out.println("这是Bean B的 构造方法");
        }
    
        void testB() {
            System.out.println("这是Bean B 的 testB 方法");
        }
    }
    
    
    这是Bean A 的构造方法
    这是Bean B的 构造方法
    这是BeanB 的init 方法
    这是BeanA的 init 方法
    这是Bean B 的 testB 方法
    

    所以得到结论: 构造方法 > @Autowired > @PostConstruct

    评论

    发表评论

    validate