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