gpt4 book ai didi

java - 使用自定义注释注释的 Bean 的自定义初始化

转载 作者:行者123 更新时间:2023-12-02 02:54:38 25 4
gpt4 key购买 nike

举例来说,我有一些用 @Foo 注释的 bean,我想跟踪这些 bean,因为我想控制它们初始化时发生的情况,有没有办法注册自定义 spring beanfactory 可以让我做到这一点吗?

如果我有另一个注释 @Bar 也需要这种特殊的初始化怎么办?

我最初的想法是通知用户使用@Lazy注释来注释每个bean,然后使用bean工厂后处理器,我将更改bean定义的一些属性。

最佳答案

解决方案是实现 BeanFactoryPostProcessor界面。这使我们可以访问 BeanDefinition 任何 bean 实例化之前,因此允许我们更改范围之类的内容,或者使 bean 延迟初始化,甚至更改 bean 的构造函数参数!

如果您的 Spring 应用程序是手动启动的,即通过创建 SpringApplicationBuilder ,那么您甚至可以将此类的实例传递给构建器的构造函数,一旦应用程序启动就会使用它。

@Component
public class FooBarBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
@Override
public void postProcessBeanFactory(@NonNull ConfigurableListableBeanFactory beanFactory) throws BeansException {
/*
String[] fooBeans = beanFactory.getBeanNamesForAnnotation(Foo.class);
BeanDefinition bean = beanFactory.getBeanDefinition(...);

/* do your processing here ... */
}
}

附: @Component需要注释才能工作

关于java - 使用自定义注释注释的 Bean 的自定义初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57084798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com