先给大家介绍一种拦截方式:拦截类型的拦截器。故名思议:比如我想拦截所有com.xx.xx.ConsumerBean,要是单独拦截某些beanId会显的很笨重,那么提供一种拦截器,拦截类型。代码如下:
/** * Created by IntelliJ IDEA. * User: guzhen.cg * Date: 13-4-10 * Time: 下午3:15 * To change this template use File | Settings | File Templates. */ import java.lang.reflect.AccessibleObject; import java.lang.reflect.Field; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import org.springframework.aop.TargetSource; import org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator; import org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.InitializingBean; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.util.Assert; import org.springframework.util.PatternMatchUtils; import org.springframework.web.context.ContextLoader; import org.springframework.web.context.ContextLoaderListener; /** * 类BeanTypeAutoProxyCreator.java的实现描述:使用配置类型代替Springframework中配置名称的实现 * * @author guzhen.cg 2013-04-18 晚上11:40 */ public class BeanTypeAutoProxyCreator extends BeanNameAutoProxyCreator implements InitializingBean, ApplicationContextAware { private static final long serialVersionUID = -9094985530794052264L; private Class<?> targetBeanType; private ApplicationContext context; /** * @param targetClass the targetClass to set */ public void setTargetBeanType(Class<?> targetClass) { this.targetBeanType = targetClass; } public void setApplicationContext(ApplicationContext context) { this.context = context; } /** * Return if the given bean name matches the mapped name. * <p> * The default implementation checks for "xxx*", "*xxx" and "*xxx*" matches, as well as direct equality. Can be * overridden in subclasses. * * @param beanName the bean name to check * @param mappedName the name in the configured list of names * @return if the names match * @see org.springframework.util.PatternMatchUtils#simpleMatch(String, String) */ protected boolean isMatch(String beanName, String mappedName) { return PatternMatchUtils.simpleMatch(mappedName, beanName); } public void afterPropertiesSet() throws Exception { Assert.notNull(targetBeanType, "targetType cannot be null"); String[] beanNames =context.getBeanNamesForType(targetBeanType, true, false); // String[] beanNames = context.getBeanNamesForType(targetBeanType); //太坑爹,不要初始化bean if (beanNames == null) { logger.warn("can not found suit bean by " + targetBeanType ); return ; } String[] result = new String[beanNames.length]; for (int i = 0; i < beanNames.length; i++) { result[i] = beanNames[i].substring(1); //截取第一个字符& } super.setBeanNames(result); } }
这个拦截器很简单,继承beanname自动拦截器,实现了ApplicationContextAware接口,获得程序中的context。这时走了一个很大的弯路,通过context获取需要拦截的beanID时,如果第三个参数allowEagerInit(渴望初始化)用默认值:true,则此时会去初始化部分bean,造成程序中出现其他拦截器失效的问题。
相关推荐
如果操作类型是这两种之一,拦截器就会继续进行属性赋值。否则,它会跳出循环,不进行额外操作。 在实际赋值部分,由于示例代码没有给出具体的赋值逻辑,通常这会涉及到反射(`java.lang.reflect.InvocationTarget...
MyBatis 分页拦截器是实现数据库查询分页效果的一种高效解决方案。在传统的SQL查询中,我们通常需要手动编写分页语句,但这容易出错且不易维护。通过使用分页拦截器,我们可以将分页逻辑封装起来,使得在编写Mapper...
### 拦截器与过滤器的区别 #### 一、概念简介 在现代软件开发过程中,特别是Web应用程序中,为了实现灵活高效的业务逻辑处理及控制流管理,常常会使用到两种设计模式:拦截器(Interceptor)与过滤器(Filter)。...
Struts拦截器是Java Web开发中的重要概念,尤其在基于Struts 2框架的应用中扮演着核心角色。这个"struts拦截器的例子"提供了一个学习和理解拦截器工作原理的起点,非常适合对这一主题感兴趣的初学者。 Struts 2框架...
Struts2是一个强大的Java web框架,它为开发者提供了丰富的功能,包括类型转换、拦截器和校验机制。本文将深入探讨这些关键知识点,并通过实际例子来帮助你理解它们的工作原理和应用。 首先,我们来看看**类型转换...
在Spring MVC框架中,拦截器(HandlerInterceptor)是一种强大的机制,用于在请求处理前后执行自定义逻辑。它们在控制器方法执行之前和之后运行,提供了一种灵活的方式来添加全局行为,如认证、授权、日志记录、性能...
封包拦截器MiniSniffer 1.0是一款专为网络数据包捕获和分析设计的强大工具。它的核心功能在于无需DLL注入就能实现对特定IP地址或特定端口的封包拦截,这为网络监控、故障排查和安全审计提供了极大的便利。 一、封包...
在Java开发中,拦截器(Interceptor)是一种设计模式,它允许开发者在某个方法或运算执行前后插入自定义的行为。这通常用于实现日志记录、事务管理、权限验证等任务,而无需修改目标方法的源码。Java的拦截器机制...
本实例练习旨在帮助你深入理解Struts2的工作原理,特别是自定义类型转换和拦截器的使用。 首先,让我们详细探讨Struts2的MVC架构。在MVC模式中,Model代表业务逻辑,View负责展示数据,而Controller则是两者之间的...
在Spring框架中,拦截器(Interceptor)是一种强大的工具,它允许开发者在请求处理前后执行自定义逻辑,例如日志记录、权限检查等。Spring MVC中的拦截器是基于AOP(面向切面编程)原理实现的,可以理解为对...
拦截器在CXF中的工作原理基于JAX-WS规范,可以分为两种类型:`InInterceptors`(入站拦截器)和`OutInterceptors`(出站拦截器)。入站拦截器处理从客户端到服务器的消息,而出站拦截器则处理从服务器返回到客户端的...
6. **结果类型和重定向**:根据拦截器的判断结果,可以设置不同的`Result`类型。例如,如果用户未登录,可以设置一个`登 录`的结果类型,将请求重定向到登录页面;如果验证成功,可以设置`success`结果类型,继续...
1. 验证文件类型:拦截器可以检查上传的文件类型,防止不安全或不受支持的文件被上传。 2. 限制文件大小:通过拦截器,可以设置文件上传的最大尺寸,防止大文件上传导致服务器资源耗尽。 3. 安全检查:拦截器可以对...
此拦截器用于处理类型转换失败的情况。如果请求参数不能正确地转换为Action中的属性类型,那么将会触发此拦截器。它会将转换失败的信息存储到`ActionContext`中,可以通过`ActionFieldError`对象获取这些信息。 ###...
网页封包拦截器是网页封包拦截的利器,是一款完全免费的绿色国产软件,能让您事半功倍,而且是为数不多的几款支持Win7的拦截软件。 网页封包拦截器支持: 2000/XP/2003/Vista/2008/Win7 全系列系统 网页封包拦截器...
### 统计时间的拦截器 #### 背景与目的 在软件开发过程中,特别是Web应用开发领域,性能监控是十分重要的一个环节。通过监控应用程序的运行时长,可以帮助开发者定位性能瓶颈、优化系统效率。本文将详细介绍如何在...
在Java Web开发中,拦截器(Interceptor)和过滤器(Filter)是两种常见的处理请求和响应的机制。它们都在请求到达目标Servlet之前进行介入,但各自有着不同的应用场景和功能特点。参数读取则是从客户端传递到服务器...
【浏览器插件-AdGuard 广告拦截器】AdGuard 广告拦截器能够高效地屏蔽网页上的各种广告类型,包括 Facebook、YouTube 以及其他众多网站上的广告。AdGuard AdBlocker 的功能包括: 1. 拦截所有广告,例如: - 视频...
Spring_AOP四种创建通知(拦截器)类型,介绍的比较详细,有实例