为了账号安全,请及时绑定邮箱和手机立即绑定

使用自定义注释注释的 bean 的自定义初始化

使用自定义注释注释的 bean 的自定义初始化

幕布斯7119047 2023-03-31 10:01:29
例如,我有一些用 注释的 bean @Foo,我想跟踪这些 bean,因为我想控制它们初始化时发生的情况,有没有办法注册一个自定义的 spring beanfactory 来允许我这样做?如果我有另一个注解@Bar也需要这个特殊的初始化怎么办?我最初的想法是通知用户用@Lazy注释对每个 bean 进行注释,然后使用 bean 工厂后处理器,我将更改 bean 定义的一些属性。
查看完整描述

1 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

解决方案是实现BeanFactoryPostProcessor接口。这使我们能够在任何 bean 被实例化之前访问,因此允许我们更改范围之类的东西,或者使 bean 延迟初始化,甚至更改 bean 的构造函数参数!BeanDefinition

如果您的 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 ... */

    }

}

需要ps@Component注释才能工作



查看完整回答
反对 回复 2023-03-31
  • 1 回答
  • 0 关注
  • 83 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信