背景:项目上要基于产品的功能进行一些定制化的开发,对一些功能的操作添加上项目上独特的业务逻辑,这就涉及到了
要对产品的接口进行重写。以下为实现BeanFactoryPostProcessor,对ioc容器中的beanDefinition进行修改,已达到项目上能够重写产品自带的一些类的方法的目的。
实现步骤:
1.定义自己的业务逻辑类,可以继承自产品的相应业务逻辑类。
public class RoleResourceServiceImpl extends RoleResourceService { @Override public void updateResource(String roleId, String systemId, String[] resIds) { // 调用父类即产品的方法 super.updateResource(roleId, systemId, resIds); // 增加项目上的业务逻辑 } }
2. 实现BeanFactoryPostProcessor类,重写postProcessBeanFactory方法。
@Component public class UpdateBeanDefinitionPostProcessor implements BeanFactoryPostProcessor { @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) { try { //让ioc容器将原来的roleResourceService注册为RoleResourceServiceImpl的实现 GenericBeanDefinition roleResourceServiceBdf = (GenericBeanDefinition) beanFactory.getBeanDefinition("roleResourceService"); roleResourceServiceBdf.setBeanClass(RoleResourceServiceImpl.class); } catch (NoSuchBeanDefinitionException e) { // } } }