栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用Java Config覆盖自动装配设定器

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用Java Config覆盖自动装配设定器

可以,我相信这个答案会满足您的需求。

我们需要的一个实现

MergedBeanDefinitionPostProcessor
将为
a
class
的属性设置正确的值
MyBean
。可以通过以下课程来完成

import org.springframework.beans.BeansException;import org.springframework.beans.factory.support.MergedBeanDefinitionPostProcessor;import org.springframework.beans.factory.support.RootBeanDefinition;import org.springframework.stereotype.Component;@Componentpublic class MyBeanPostProcessor implements MergedBeanDefinitionPostProcessor {    @Override    public void postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, Class<?> beanType, String beanName) {        if(beanName.equals("myBeanFirst")) { beanDefinition.getPropertyValues().add("a", getMyBeanFirstAImpl());        }        else if(beanName.equals("myBeanSecond")) { beanDefinition.getPropertyValues().add("a", getMyBeanSecondAImpl());        }    }    private Object getMyBeanFirstAImpl() {        return new AImpl();    }    private Object getMyBeanSecondAImpl() {        return new AImpl();    }    @Override    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {        return bean;    }    @Override    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {        return bean;    }}

如您所见,这里的bean名称是硬编码的,但是可以在静态最终String中设置它们,以下代码中的@Bean批注也将使用它们

@Configurationpublic class Configuration {    @Bean    public MyBean myBeanFirst() {        return new MyBean();    }    @Bean    public MyBean myBeanSecond() {        return new MyBean();    }}

您将在以下代码中注意到,在MyBean创建方法中未调用setA,因为无论设置的值(在这种情况下未设置)在Spring执行bean后处理器时都将被覆盖。

如果您需要A的默认值(例如,要将其注入其他bean),请继续在先前的配置中定义一个@Bean



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/515622.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号