我有一个自定义标签,我想在页面调用该标签时,spring能拦截标签的doStartTag方法,做一些相关操作,以下是自定义标签代码
/**
*
*/
package com.hinge.bi.taglib;
/**
* @author
*/
import java.util.List;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.tagext.TagSupport;
import com.hinge.bi.service.explorer.ResourceServiceI;
import com.hinge.bi.service.taglib.TagLibServiceI;
import com.hinge.bi.service.useradmin.UserServiceI;
public class UserExploreList extends TagSupport
{
public UserExploreList()
{
super();
}
public int doStartTag() throws JspTagException
{
System.out.println( "Hello Sunning ");
return EVAL_BODY_INCLUDE;
}
public int doEndTag() throws JspTagException
{
return EVAL_PAGE;
}
}
以下是spring 的环绕通知代码
-----------------------------------------------
package com.hinge.bi.taglib.aop;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import com.hinge.bi.service.explorer.ResourceServiceI;
import com.hinge.bi.service.useradmin.UserServiceI;
public class PurviewInspect implements MethodInterceptor
{
private UserServiceI userService;
private ResourceServiceI resourceService;
public void setResourceService(ResourceServiceI resourceService)
{
this.resourceService = resourceService;
}
public void setUserService(UserServiceI userService)
{
this.userService = userService;
}
public Object invoke(MethodInvocation invocation) throws Throwable
{
System.out.println( "Hello Sunnning ");
HttpServletRequest request = (HttpServletRequest) invocation.getArguments()[2];
HttpServletResponse response=(HttpServletResponse) invocation.getArguments()[3];
String method=request.getParameter( "action ");
if (true)
{
response.sendRedirect( "/hingebi/control/login.jsp ");
return null;
}
Object result = invocation.proceed(); // 调用MyBuyBook中的buyBook方法,即真实操作
return result;
}
}
以下是spring中的配置
<?xml version= "1.0 "?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN " "http://www.springframework.org/dtd/spring-beans.dtd ">
<beans>
<bean id= "userExploreList " class= "com.hinge.bi.taglib.UserExploreList ">
</bean>
<!-- advice配置-->
<bean id= "explorePurviewInspect " class= "com.hinge.bi.taglib.aop.PurviewInspect ">
<property name= "userService ">
<ref bean= "userService " />
</property>
<property name= "resourceService ">
<ref bean= "resourceService " />
</property>
</bean>
<bean id= "explorePurviewInspectAdvisor " class= "org.springframework.aop.support.NameMatchMethodPointcutAdvisor ">
<property name= "mappedName " value= "doStartTag ">
</property>
<property name= "advice " ref= "explorePurviewInspect ">
</property>
</bean>
<!-- 装配advisor-->
<bean id= "theAdvisor " class= "org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator ">
<property name= "beanNames ">
<value> userExploreList </value>
</property>
<property name= "interceptorNames ">
<list>
<value> explorePurviewInspectAdvisor </value>
</list>
</property>
</bean>
</beans>
但是在运行含有该标签的jsp时,总是直接就运行doStartTag方法了,spring没有起到拦截的作用。。
分享到:
相关推荐
SpringBoot结合AspectJ实现SpringAOP拦截指定方法的知识点涵盖了多个方面,这包括Spring AOP的基本概念、SpringBoot的应用、切点(Pointcut)与通知(Advice)的定义、自定义注解以及AspectJ的使用。以下是这些知识...
环绕通知是在目标方法调用前后都会执行的通知类型,它是四种通知中最强大的一种,因为它不仅可以控制目标方法是否被调用,还可以完全控制返回值。要实现环绕通知,类需实现`MethodInterceptor`接口并实现`invoke`...
在上述示例中,我们首先定义了一个切面`MyAspect`,然后使用`@Around`注解创建了一个环绕通知,该通知拦截所有`com.example.service`包下的方法。在`interceptWithEL`方法中,我们创建了一个`...
- 环绕通知(Around Advice):包裹整个方法,可以在方法执行前、执行后以及是否抛出异常时进行自定义操作。 5. **切入点(Join Point)** 切入点是程序执行流程中的某个特定点,如方法的调用或异常的处理。切入...
- `@Around`:环绕通知,可以在方法调用前后进行自定义处理,可以完全控制方法的调用。 3. **连接点(Join Point)**:连接点是程序执行中的一个点,如方法的调用或字段的访问。在Spring中,连接点主要是方法的...
Spring支持多种通知类型,包括前置通知(Before)、后置通知(After)、环绕通知(Around)等。在实际应用中,我们可以通过配置XML或使用注解方式定义切面,以实现对业务代码的透明化增强。 3. Spring事务管理...
5. **环绕通知**:在目标方法调用前后都执行,类似于设计模式中的装饰者模式。 ### Spring通知的XML配置示例解析 在给定的文件片段中,我们可以看到Spring的通知配置是通过XML文件来实现的。下面是对这个示例的...
切点决定了哪些方法会被通知拦截,它使用AspectJ切点表达式来定义。 最终,Spring AOP将这些配置信息转换为代理对象,在运行时动态地拦截方法调用,并将调用分派给相应的通知实现,从而实现AOP的增强功能。这种代理...
在Spring MVC框架中,拦截器(Interceptor)是一个至关重要的组件,它允许我们在处理请求之前或之后执行自定义逻辑。在本篇文章中,我们将深入探讨Spring MVC中的拦截器机制,了解其工作原理、如何配置以及实际应用...
通过对这个简单的AOP拦截器实现的学习,我们可以进一步探索如何结合注解驱动的AOP、环绕通知(`Around Advice`)、代理模式的实现细节、以及如何在实际项目中利用AOP解决实际问题。AOP是Spring框架的强大工具,理解...
在Spring AOP中,通知主要有五种类型:前置通知(Before)、后置通知(After)、返回后通知(After Returning)、异常后通知(After Throwing)和环绕通知(Around)。 2. **@Before 前置通知** 使用`@Before`注解...
1. **环绕通知(Around)开始**:环绕通知首先执行,它包裹整个方法调用,通常通过`ProceedingJoinPoint`对象来决定何时调用目标方法。 2. **前置通知(Before)**:在环绕通知内部,然后执行前置通知。 3. **环绕...
通知是在特定连接点执行的代码,有多种类型,如“Before”(在连接点前执行)、“After returning”(在方法正常返回后执行)、“After throwing”(在方法抛出异常后执行)和“Around”(环绕通知,可以在连接点...
Spring AOP提供了五种不同类型的通知:前置通知(Before)、后置通知(After)、返回后通知(After Returning)、异常后通知(After Throwing)和环绕通知(Around)。在本场景中,我们主要关注前置和后置通知,因为...
环绕通知是Spring AOP中最强大的一种增强方式,它允许在方法调用前后执行自定义的逻辑,并可以选择是否执行目标方法。环绕通知通过`@Around`注解实现,需要实现`ProceedingJoinPoint`接口的`proceed()`方法来调用...
在Spring AOP(面向切面编程)中,切面环绕通知是一种强大的机制,它允许我们在方法执行前后插入自定义的行为,比如记录日志、事务管理等。本篇将深入探讨如何利用Spring AOP的切面环绕通知来实现一个日志记录系统,...
除了`@DeclareParents`,还有其他类型的注解通知,如`@Before`(前置通知)、`@After`(后置通知)、`@Around`(环绕通知)等,它们分别在目标方法执行前、执行后和执行前后进行拦截操作。 至于`icalculator -...
创建一个切面类,使用`@Aspect`注解,定义一个环绕通知,该通知将在带有`@Loggable`注解的方法执行前后被调用。在这个通知中,我们可以记录方法的输入参数、执行时间以及任何抛出的异常。 ```java @Component @...
Spring AOP支持两种主要的通知类型:方法前(Before)、方法后(After)以及环绕通知(Around)。这些通知可以通过在方法上添加特定的注解来实现,例如`@Before`、`@After`和`@Around`。 1. `@Before`注解:在目标...
环绕通知: 1)切面1:次要业务方法 2) 执行切入点:被拦截的主要业务方法 1)切面2:次要业务方法 4.异常通知: try{ 执行切入点:被拦截的主要业务方法 }catch(Exception ){ 切面 } Spring AOP ...