BeanPostProcessor的理解

BeanPostProcessor

今天在看別人代碼的時候,看到對BeanPostProcessor的使用,之前也使用過,但有點忘記了,特地留個筆記

BeanPostProcessor 定義

BeanPostProcessor(Bean後處理器)是Spring框架中的一個重要接口,用於在Spring容器實例化、配置和初始化Bean時介入Bean的生命週期。通過實現BeanPostProcessor接口,你可以在Bean的初始化階段前後執行自定義邏輯,對Bean進行處理和修改。

BeanPostProcessor方法

BeanPostProcessor接口定義了兩個方法:

  • postProcessBeforeInitialization(Object bean, String beanName): 在Bean的初始化方法調用之前執行。你可以在此方法中對Bean進行修改或者在初始化之前執行一些自定義邏輯。

  • postProcessAfterInitialization(Object bean, String beanName): 在Bean的初始化方法調用之後執行。你可以在此方法中對Bean進行修改或者在初始化之後執行一些自定義邏輯。

BeanPostProcessor使用場景

  • 自定義初始化邏輯:你可以在postProcessBeforeInitialization方法中添加一些自定義的初始化邏輯,以確保Bean在初始化之前具有所需的狀態。

  • AOP(面向切面編程):Spring的AOP框架是通過BeanPostProcessor來實現的,它會在Bean的初始化過程中,動態地創建代理對象,用於實現切面行爲。

  • 屬性值處理:你可以在postProcessAfterInitialization方法中檢查Bean的屬性,例如,加密密碼字段或者替換屬性值。

  • 自定義註解處理:你可以創建一個BeanPostProcessor,用於處理自定義註解,根據註解信息對Bean進行特殊處理。

github中使用案例

@Component
@Order(value = -1)
@ConditionalOnProperty(prefix = "async", value = "enabled", havingValue = "true")
public class AsyncInitBean implements BeanPostProcessor {

    @Autowired
    private AsyncProxy asyncProxy;

    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        Method[] methods = ReflectionUtils.getAllDeclaredMethods(bean.getClass());
        if (ArrayUtil.isEmpty(methods)) {
            return bean;
        }
        for (Method method : methods) {
            AsyncExec asyncExec = AnnotationUtils.findAnnotation(method, AsyncExec.class);
            if (null == asyncExec) {
                continue;
            }
            ProxyMethodDto proxyMethodDto = new ProxyMethodDto();
            proxyMethodDto.setBean(SpringBeanConfig.getBean(beanName));
            proxyMethodDto.setMethod(method);
            // 生成方法唯一標識
            String key = asyncProxy.getAsyncMethodKey(bean, method);
            asyncProxy.setProxyMethod(key, proxyMethodDto);
        }
        return bean;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章