1. 程式人生 > >Spring3中替換預設攔截器的方法BeanFactoryPostProcessor

Spring3中替換預設攔截器的方法BeanFactoryPostProcessor

由於Spring預設的靜態資源處理器不能滿足需求,需要做一些自己的處理,但mvc:resources的標籤又挺好用的,不想每次配置靜態資源目錄的時候,還要特殊指定處理器,也不想修改任何配置程式碼,於是找到了使用BeanFactoryPostProcessor的方法

實現程式碼如下:

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.stereotype.Service;
import org.springframework.web.servlet.resource.ResourceHttpRequestHandler;

// 這裡使用的是註解方法
@Service
public class ResourceHttpRequestHandlerReplacer implements BeanFactoryPostProcessor {
    
    public void postProcessBeanFactory(ConfigurableListableBeanFactory factory) throws BeansException {
        // 找到spring注入器中所有使用原始ResourceHttpRequestHandler的地方
        String[] names = factory.getBeanNamesForType(ResourceHttpRequestHandler.class);
        //全部替換為自己定義的類
        for (String name : names) {
            BeanDefinition bd = factory.getBeanDefinition(name);
            bd.setBeanClassName("com.mycompany.core.spring.mvc.ResourceCacheHttpRequestHandler");
        }
    }
}

以上類以及自定義的攔截器處理類com.mycompany.core.spring.mvc.ResourceCacheHttpRequestHandler完成後,只要在spring配置檔案中新增一個 ResourceHttpRequestHandlerReplacer 包的註解掃描即可

<context:component-scan base-package="com.mycompany.core.spring.mvc"></context:component-scan>