由于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>
分享到:
相关推荐
6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.1.1. @Configurable object的单元测试 6.8.1.2. 多application context情况下的处理 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来...
Spring框架中的BeanFactoryPostProcessor是一个非常重要的扩展点,它允许开发者在BeanFactory标准初始化之后对其进行定制和修改。下面我们将详细介绍BeanFactoryPostProcessor的扩展原理和使用方法。 首先,...
- 介绍了如何使用查找方法注入和替换任意方法。 **4.5 Bean的范围** - **4.5.1 单例范围** - 介绍了单例范围的bean如何工作。 - **4.5.2 原型范围** - 说明了原型范围的bean的工作原理。 - **4.5.3 单例bean和...
文档最后还涉及到了Spring容器的扩展点,如BeanPostProcessor和BeanFactoryPostProcessor,这些扩展点让开发者有机会在Spring容器实例化Bean前后以及加载配置元数据前后执行自定义逻辑。 整体来看,Spring4中文文档...
总的来说,这个压缩包中的代码片段展示了如何在Spring中利用`@Bean`注解和`initMethod`属性实现异步bean初始化,结合Sofaboot框架,提升应用程序的启动效率和并发性能。通过这些类的设计和交互,我们可以看到Spring...
6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...
当事务方法被调用时,拦截器会检查方法上的`@Transactional`注解,根据其属性启动或加入合适的事务。 最后,Spring还支持自定义注解。你可以创建自己的注解,并使用`@ComponentScan`的`@Annotation`参数告诉Spring...
在Spring中,例如AOP(面向切面编程)的实现,通过代理模式和适配器模式将切面逻辑插入到目标对象的方法执行中。 5. **装饰器模式**:装饰器模式允许在运行时动态地给对象添加新的行为或职责。Spring AOP中的代理...
- 介绍了依赖注入的概念及其在Spring中的实现方式。 - **3.4.2 Dependencies and configuration in detail** - 详细讨论了依赖项的配置和注入细节。 - **3.4.3 Using depends-on** - 使用`depends-on`属性确保...
更改bean的定义(BeanFactoryPostProcessor接口)3.注册Bean到Spring容器(BeanDefinitionRegistryPostProcessor接口)4.通过FactoryBean结合InvocationHandler关于动态代理invoke()方法的理解5.BeanNameAware 7....
3. **单例模式**:Spring中的Bean默认是单例的,这意味着对于同一个Bean ID,`AbstractBeanFactory`只会创建并缓存一个实例。`getSingleton()`方法确保了Bean的唯一性,避免多次实例化。 4. **适配器模式**:适配器...
在Spring框架中,容器后处理器(BeanFactoryPostProcessor)是一种非常实用的设计模式,主要用于在容器初始化完成后对容器进行额外的定制操作。这种设计模式不仅提高了系统的灵活性,还增强了系统的可配置性。 ####...
在某些情况下,可能需要覆盖或定义一个Bean的某个方法,这可以通过查找方法注入或任意方法替换来实现。 1.5 Bean的作用域 Spring支持多种作用域,包括单例、原型、请求、会话、应用和WebSocket等。 1.5.1 单例作用...
在源码中,`org.springframework.beans.factory.config`包包含了许多关于生命周期的接口和类,如InitializingBean、DisposableBean以及BeanFactoryPostProcessor等。 6. **事件驱动模型**:Spring提供了基于...
综上所述,要在低版本的Spring中实现类似自动配置的功能,需要巧妙地利用Spring提供的扩展点,如BeanFactoryPostProcessor和BeanPostProcessor,以及Java Config和XML配置的组合。同时,还需要结合生命周期回调和...
在这个类中,我们使用 @SpringBootApplication 注解来启用 Spring Boot 的自动配置功能,并在 main 方法中启动应用程序。 其次,我们需要创建一个动态加载的对象 DynamicCreateBean.java,这个对象具有一个 print...
6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ Load-time weaving(LTW) 6.9. ...
- **接口注入**(Type 1):通过接口的方法来注入依赖,这种方式在Spring中并不常用。 - **设值注入**(Type 2):通过setter方法来注入依赖,适用于属性较少的情况。 - **构造器注入**(Type 3):通过构造函数...