实现BeanDefinitionRegistryPostProcessor接口,移除原来的beanName,注册新的bean, 例如
@Slf4j
@Component
public class CustomerBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
}
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
log.info("bean 定义查询与修改");
// 要覆盖的beanName
String beanName = "shiroFilter";
// 先移除原来的bean定义
registry.removeBeanDefinition(beanName);
// 注册我们自己的bean定义 CustomerShiroFilterFactoryBean自定义的类
BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(CustomerShiroFilterFactoryBean.class);
builder.addConstructorArgReference("securityManager");
registry.registerBeanDefinition(beanName, builder.getBeanDefinition());;
}
}