3 回答

TA貢獻1966條經驗 獲得超4個贊
從Spring 4.2開始,您可以使用@EventListener(文檔)
@Component
class MyClassWithEventListeners {
@EventListener({ContextRefreshedEvent.class})
void contextRefreshedEvent() {
System.out.println("a context refreshed event happened");
}
}

TA貢獻1784條經驗 獲得超7個贊
創建您的注釋
@Retention(RetentionPolicy.RUNTIME)
public @interface AfterSpringLoadComplete {
}
建立課程
public class PostProxyInvokerContextListener implements ApplicationListener<ContextRefreshedEvent> {
@Autowired
ConfigurableListableBeanFactory factory;
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
ApplicationContext context = event.getApplicationContext();
String[] names = context.getBeanDefinitionNames();
for (String name : names) {
try {
BeanDefinition definition = factory.getBeanDefinition(name);
String originalClassName = definition.getBeanClassName();
Class<?> originalClass = Class.forName(originalClassName);
Method[] methods = originalClass.getMethods();
for (Method method : methods) {
if (method.isAnnotationPresent(AfterSpringLoadComplete.class)){
Object bean = context.getBean(name);
Method currentMethod = bean.getClass().getMethod(method.getName(), method.getParameterTypes());
currentMethod.invoke(bean);
}
}
} catch (Exception ignored) {
}
}
}
}
通過@Component注釋或在xml中注冊此類
<bean class="ua.adeptius.PostProxyInvokerContextListener"/>
并在環境初始化后要在任何要使用的方法上使用注解,例如:
@AfterSpringLoadComplete
public void init() {}
- 3 回答
- 0 關注
- 566 瀏覽
添加回答
舉報