覆盖spring的bean_Spring Bean覆盖策略

覆盖spring的bean

这些天,我越来越多地与Spring合作,而我发现的问题引起了人们的疑问。 本周,我的想法转向了bean覆盖,即用同一个名称注册多个bean。

对于简单的项目,则不需要这样做。 但是当围绕核心构建一个插件架构时,这可能是一个解决方案。 这是我发现并验证的有关bean覆盖的一些事实。

每个文件一个bean id

Spring bean文件中的id属性的类型为ID ,这意味着在特定的Spring bean定义文件中,只有一个具有特定ID bean。

根据上下文片段的加载顺序覆盖bean

与类路径加载相反,在类路径加载中,第一个类比其他类在类路径上具有更高的优先级,它是最后使用的具有相同名称的最后一个 bean。 这就是为什么我称它为覆盖。 反转片段加载顺序可以证明这一点。

片段组装方法定义顺序

片段可以从Spring bean定义文件中的<import>语句或通过外部组件( 例如 ,Web应用程序或测试类中的Spring上下文侦听器)进行汇编。 都定义了确定性顺序。
附带说明一下,尽管我以前在项目中使用过imp

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果不想使用注解来覆盖 Spring Bean,可以通过编程的方式来实现。具体的做法是,在应用程序启动时,通过编写一个 `BeanFactoryPostProcessor` 的实现类来修改 Bean 的定义。 `BeanFactoryPostProcessor` 接口中有一个 `postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)` 方法,该方法会在 Bean 工厂加载 Bean 定义之后,在 Bean 实例化之前被调用。在该方法中,可以通过 `beanFactory.getBeanDefinition(beanName)` 方法获取到指定 Bean 的 BeanDefinition 对象,然后修改其中的属性值,从而覆盖原有的 Bean 定义。 具体的代码实现如下: ```java import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.BeanFactoryPostProcessor; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.stereotype.Component; @Component public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor { @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { BeanDefinition beanDefinition = beanFactory.getBeanDefinition("myBean"); beanDefinition.setBeanClassName("com.example.MyNewBeanClass"); } } ``` 上述代码中,我们通过 `beanFactory.getBeanDefinition("myBean")` 方法获取了名为 `myBean` 的 Bean 的 BeanDefinition 对象,并将其 Bean 类的名称修改为了 `com.example.MyNewBeanClass`。这样,在应用程序启动时,就会使用 `MyNewBeanClass` 类来实例化 `myBean` Bean,从而覆盖原有的 Bean 定义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值