我有A和B这样的课程:
public static class A {
public A() {
System.out.println("A");
}
public void init() {
System.out.println("RUN AFTER CONSTRUCTOR");
}
}
public static class B extends A {
public B() {
System.out.println("B");
}
}
public static void main(String[] args) {
new B();
}
我希望A和A的所有子类在构造函数完成后运行一段代码。
是否可以在不添加Spring / AspectJ或类似内容的情况下使用?
答案 0 :(得分:2)
没有。普通Java并没有提供类似的钩子方法
bean容器中可用的@PostConstruct
最初设计用于在完成依赖注入之后执行init处理
当容器为您执行bean的实例化(和销毁)时,它有一种在实例化之后(或在它们被销毁之前执行代码的方式:@PreDestroy
)。
但我不想在每个子类中重复它,它应该是 甚至子类构造函数完成后调用
如果层次结构的每个构造函数调用都必须执行特定处理,则必须在每个类或基类中指定它。
答案 1 :(得分:0)
正如@DavidBrossard所说,在Vanilla Java上,你可以在构造函数的末尾调用init()来执行@PostConstruct