BeanDefinition技巧-1

结论:

AbstractBeanDefinition.AUTOWIRE_BY_TYPE :设置当前bd的属性注入方式为set***方法按类型注入;

话不多说直接刚代码

定义一个bdRegistry后置处理器 测试 具体bean的set**方法拉起

public class MyObject4 implements InitializingBean {
    private SqlSessionTemplate sqlSessionTemplate;
    private MyObject2 myObject2;
    public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
        // 如果IOC中存在 SqlSessionFactory 类型bean,则当前set方法就会被拉起
        sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory);
    }
    public void setMyObject2(MyObject2 myObject2) {
        // 如果IOC中存在 MyObject2  类型bean,则当前set方法就会被拉起
        this.myObject2 = myObject2; // 
    }
    public void setService(MyService1 myService) {
        // 如果IOC中存在 MyService1 类型bean,则当前set方法就会被拉起
        System.out.println(myService);
    }
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println(sqlSessionTemplate);
    }
}

// BeanDefinitionRegistry 后置处理器,用于拓展 bd
public class MyBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {
    @Override
    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
        RootBeanDefinition db2 = new RootBeanDefinition(MyObject4.class);
        db2.setAutowireMode(AbstractBeanDefinition.AUTOWIRE_BY_TYPE);
        registry.registerBeanDefinition("myObject4", db2);
    }
// ...
}

再强调一次:按类型,寻址IOC中对应类型的bean,拉起调用set**** 对应方法。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容