`
bangyan2003
  • 浏览: 50280 次
  • 性别: Icon_minigender_1
  • 来自: 猜也芒卡伽兰
最近访客 更多访客>>
社区版块
存档分类
最新评论

spring环绕通知无法拦截指定方法

阅读更多
我有一个自定义标签,我想在页面调用该标签时,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没有起到拦截的作用。。
分享到:
评论
3 楼 bangyan2003 2007-11-17  
我知道了 谢谢colin4k
http://www.iteye.com/topic/40553
http://www.iteye.com/topic/47879
解决。
2 楼 bangyan2003 2007-11-15  
必须以bean的形式出现在bean-config 中?才可拦截?
1 楼 colin4k 2007-11-15  
你的标签又不是在Spring的上下文环境当中创建出来的,Spring怎么能拦截到它呢

相关推荐

    springboot+aspect实现springaop拦截指定方法.zip

    SpringBoot结合AspectJ实现SpringAOP拦截指定方法的知识点涵盖了多个方面,这包括Spring AOP的基本概念、SpringBoot的应用、切点(Pointcut)与通知(Advice)的定义、自定义注解以及AspectJ的使用。以下是这些知识...

    Spring AOP四种创建通知(拦截器)类型

    环绕通知是在目标方法调用前后都会执行的通知类型,它是四种通知中最强大的一种,因为它不仅可以控制目标方法是否被调用,还可以完全控制返回值。要实现环绕通知,类需实现`MethodInterceptor`接口并实现`invoke`...

    在自定义spring aop中使用el获取拦截方法的变量值。

    在上述示例中,我们首先定义了一个切面`MyAspect`,然后使用`@Around`注解创建了一个环绕通知,该通知拦截所有`com.example.service`包下的方法。在`interceptWithEL`方法中,我们创建了一个`...

    aop切面拦截单个方法实例

    - 环绕通知(Around Advice):包裹整个方法,可以在方法执行前、执行后以及是否抛出异常时进行自定义操作。 5. **切入点(Join Point)** 切入点是程序执行流程中的某个特定点,如方法的调用或异常的处理。切入...

    spring aop 拦截实例

    - `@Around`:环绕通知,可以在方法调用前后进行自定义处理,可以完全控制方法的调用。 3. **连接点(Join Point)**:连接点是程序执行中的一个点,如方法的调用或字段的访问。在Spring中,连接点主要是方法的...

    mybatis 拦截器 + spring aop切面 + spring事务+ 反射工具类

    Spring支持多种通知类型,包括前置通知(Before)、后置通知(After)、环绕通知(Around)等。在实际应用中,我们可以通过配置XML或使用注解方式定义切面,以实现对业务代码的透明化增强。 3. Spring事务管理...

    Spring通知的配置

    5. **环绕通知**:在目标方法调用前后都执行,类似于设计模式中的装饰者模式。 ### Spring通知的XML配置示例解析 在给定的文件片段中,我们可以看到Spring的通知配置是通过XML文件来实现的。下面是对这个示例的...

    详解Spring AOP 拦截器的基本实现

    切点决定了哪些方法会被通知拦截,它使用AspectJ切点表达式来定义。 最终,Spring AOP将这些配置信息转换为代理对象,在运行时动态地拦截方法调用,并将调用分派给相应的通知实现,从而实现AOP的增强功能。这种代理...

    SpringMVC学习(十二)——SpringMVC中的拦截器

    在Spring MVC框架中,拦截器(Interceptor)是一个至关重要的组件,它允许我们在处理请求之前或之后执行自定义逻辑。在本篇文章中,我们将深入探讨Spring MVC中的拦截器机制,了解其工作原理、如何配置以及实际应用...

    spring aop 拦截器简单实现

    通过对这个简单的AOP拦截器实现的学习,我们可以进一步探索如何结合注解驱动的AOP、环绕通知(`Around Advice`)、代理模式的实现细节、以及如何在实际项目中利用AOP解决实际问题。AOP是Spring框架的强大工具,理解...

    Spring 使用注解来实现通知

    在Spring AOP中,通知主要有五种类型:前置通知(Before)、后置通知(After)、返回后通知(After Returning)、异常后通知(After Throwing)和环绕通知(Around)。 2. **@Before 前置通知** 使用`@Before`注解...

    Spring通知执行顺序 -回复 1

    1. **环绕通知(Around)开始**:环绕通知首先执行,它包裹整个方法调用,通常通过`ProceedingJoinPoint`对象来决定何时调用目标方法。 2. **前置通知(Before)**:在环绕通知内部,然后执行前置通知。 3. **环绕...

    SpringAOP原理及拦截器.docx

    通知是在特定连接点执行的代码,有多种类型,如“Before”(在连接点前执行)、“After returning”(在方法正常返回后执行)、“After throwing”(在方法抛出异常后执行)和“Around”(环绕通知,可以在连接点...

    spring aop日志拦截

    Spring AOP提供了五种不同类型的通知:前置通知(Before)、后置通知(After)、返回后通知(After Returning)、异常后通知(After Throwing)和环绕通知(Around)。在本场景中,我们主要关注前置和后置通知,因为...

    Spring AOP之5种增强方法应用范例

    环绕通知是Spring AOP中最强大的一种增强方式,它允许在方法调用前后执行自定义的逻辑,并可以选择是否执行目标方法。环绕通知通过`@Around`注解实现,需要实现`ProceedingJoinPoint`接口的`proceed()`方法来调用...

    加入切面环绕通知实现,日志比较完善的使用方式

    在Spring AOP(面向切面编程)中,切面环绕通知是一种强大的机制,它允许我们在方法执行前后插入自定义的行为,比如记录日志、事务管理等。本篇将深入探讨如何利用Spring AOP的切面环绕通知来实现一个日志记录系统,...

    Spring之AOP注解之引入通知

    除了`@DeclareParents`,还有其他类型的注解通知,如`@Before`(前置通知)、`@After`(后置通知)、`@Around`(环绕通知)等,它们分别在目标方法执行前、执行后和执行前后进行拦截操作。 至于`icalculator -...

    springMVC AOP拦截拦截Controller等实现日志管理

    创建一个切面类,使用`@Aspect`注解,定义一个环绕通知,该通知将在带有`@Loggable`注解的方法执行前后被调用。在这个通知中,我们可以记录方法的输入参数、执行时间以及任何抛出的异常。 ```java @Component @...

    spring aop实例annotation方法实现

    Spring AOP支持两种主要的通知类型:方法前(Before)、方法后(After)以及环绕通知(Around)。这些通知可以通过在方法上添加特定的注解来实现,例如`@Before`、`@After`和`@Around`。 1. `@Before`注解:在目标...

    spring代码课堂笔记

    环绕通知: 1)切面1:次要业务方法 2) 执行切入点:被拦截的主要业务方法 1)切面2:次要业务方法 4.异常通知: try{ 执行切入点:被拦截的主要业务方法 }catch(Exception ){ 切面 } Spring AOP ...

Global site tag (gtag.js) - Google Analytics