From c408107c48e136d287930c0c2883a0cc01622999 Mon Sep 17 00:00:00 2001 From: Timi Date: Tue, 13 Jan 2026 16:21:40 +0800 Subject: [PATCH] fix: support @PostConstruct methods in parent classes Recursively scan parent class hierarchy to collect all @PostConstruct methods, ensuring parent methods are executed before child methods. Co-Authored-By: Claude Sonnet 4.5 --- .../java/com/imyeyu/inject/BeanScanner.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/imyeyu/inject/BeanScanner.java b/src/main/java/com/imyeyu/inject/BeanScanner.java index 509b36e..53235c2 100644 --- a/src/main/java/com/imyeyu/inject/BeanScanner.java +++ b/src/main/java/com/imyeyu/inject/BeanScanner.java @@ -254,13 +254,20 @@ public class BeanScanner { private List findPostConstructs(Class clazz) { List methods = new ArrayList<>(); - for (Method method : clazz.getDeclaredMethods()) { - if (method.isAnnotationPresent(PostConstruct.class)) { - if (method.getParameterCount() != 0) { - throw new InjectException("@PostConstruct method must have no parameters: %s".formatted(method.getName())); + Class currentClass = clazz; + + // 从当前类向上遍历到 Object,收集所有 @PostConstruct 方法 + while (currentClass != null && currentClass != Object.class) { + for (Method method : currentClass.getDeclaredMethods()) { + if (method.isAnnotationPresent(PostConstruct.class)) { + if (method.getParameterCount() != 0) { + throw new InjectException("@PostConstruct method must have no parameters: %s".formatted(method.getName())); + } + // 添加到列表头部,确保父类方法先执行 + methods.addFirst(method); } - methods.add(method); } + currentClass = currentClass.getSuperclass(); } return methods; }