现在公司的开发模式,变成了主版本一直迭代开发,定制化版本通过pom引入主版本的jar,才会随着主版本的升级而升级。
有些特殊场景,比如定制化项目的时候,需要和客户的登录方式做对接,对接的方式各式各样,原有的登录逻辑,就得需要改变。
新建一个CustomLoginFilter替换原有的LoginFilter,启动后报错,百度了一些方式,比如在CustomLoginFilter加注解@Order(2),还是不能实现。以下代码可以实现。
代码如下
public class OverrideExistBean implements BeanDefinitionRegistryPostProcessor { @Override public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException { String beanName = "LoginFilter"; if (registry.containsBeanDefinition(beanName)){ registry.removeBeanDefinition(beanName); GenericBeanDefinition beanDefinition = new GenericBeanDefinition(); beanDefinition.setBeanClass(CustomLoginFilter.class); registry.registerBeanDefinition(beanName,beanDefinition); } } @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException { } }
有兴趣的可以去看下源码。