美文网首页
BeanDefinition技巧-1

BeanDefinition技巧-1

作者: 大黑跟小白的日常 | 来源:发表于2021-09-15 18:54 被阅读0次

结论:

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**** 对应方法。

相关文章

网友评论

      本文标题:BeanDefinition技巧-1

      本文链接:https://www.haomeiwen.com/subject/psllgltx.html