为什么我可以识别@PostConstruct?

时间:2018-07-08 13:58:39

标签: java spring spring-annotations

您能告诉我为什么在我的情况下运行带有@PostContruct注释的方法吗?据我所知,Bean Post Processors处理带有@PostContruct的方法。如果要激活默认的CommonAnnotationBeanPostProcessor,则需要在XML配置中添加<context:annotation-config/>,但我只想使用批注配置。在我的情况下,配置中的@ComponentScan指向service。这意味着只有该包中的类才可以实例化。

配置类:

package config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan(basePackages = "service")
public class AppConfig {
}

简单类:

package service;

import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;

@Component
public class Simple {

    @PostConstruct
    private void sout(){
        System.out.println("SOUT");
    }
}

启动器:

import config.AppConfig;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import service.Simple;

public class Launcher {

    public static void main(String[] args) {
        ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);
        Simple simple = ctx.getBean("simple", Simple.class);
    }

}

应用程序的输出为“ SOUT”。您能解释谁调用@PostContruct方法以及如何调用吗?

1 个答案:

答案 0 :(得分:0)

AnnotationConfigApplicationContext是基于XML的配置的替代方法。当您使用它创建对象时,它首先创建对象和@Autowired属性,然后调用@PostConstruct方法。这是编写自己必须自己编写的setup()init()方法的一种方便的选择。