`
newjoy
  • 浏览: 2208 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Spring 可以迭代拦截么?

阅读更多
我希望通过 Spring 拦截 UserManagerImpl 的 saveUserProperty 和 addUserPropertyValue 两个方法。以下分别是 UserManagerImpl 和 Advice 的两个类的主要代码

    
    public class UserManagerImpl implements UserManager {

    private static Log log = LogFactory.getLog(UserManagerImpl.class);

   
    public void saveUserProperty(long userId, String key, String value) throws
            StatusCodeException {
        UserProperty prop = userPropertyDAO.getUserProperty(userId,
                key, UserProperty.STATUS_ACTIVE);
        if (prop == null) {
            prop = new UserProperty();
            prop.setUserId(userId);
            prop.setPropName(key);
            prop.setPropValue(value);
        } else {
            prop.setUpdateDate(Calendar.getInstance());
            prop.setPropValue(value);
        }
        userPropertyDAO.saveUserProperty(prop);
    }

    public long addUserPropertyValue(long userId, String key, long value) throws
            StatusCodeException {
        long sum = 0;
        String propVaule = getUserProperty(userId, key);
        if (propVaule != null) {
            sum = StringUtils.parseLong(propVaule, 0);
        }
        sum = sum + value;
        saveUserProperty(userId, key, String.valueOf(sum));
        return sum;
    }

}



注意:addUserPropertyValue 中调用了 saveUserProperty

  public UserStatisticAdvice() {
    }

    public void afterReturning(Object returnValue, Method method,
                               Object[] args, Object target) throws
            Throwable {

        if (target == null)return;
        String methodName = method.getName();

        log.debug("advice running...method="+methodName);

        if (target instanceof UserManager) { 

            if ("addUserPropertyValue".equals(methodName)) {
                long userId = ((Long)args[0]).longValue();
                String key = (String)args[1];
                if (userId > 0 && key != null){
                    ...
                }
            }
            
            if ("saveUserProperty".equals(methodName)) {
                long userId = ((Long)args[0]).longValue();
                String key = (String)args[1];
                String value = (String)args[2];
                if (userId > 0 && key != null && value != null){
                    ...
                }
            }
        }

    }


}


按照我的理解,
当 UserManger 的 addUserPropertyValue 被调用时,拦截器应该被拦截到,
由于被拦截后, UserManger 又调用了 saveUserProperty,故又会被拦截器拦截到。

但是跟踪结果,却发现 只有 addUserPropertyValue 被调用时,Spring 进行了拦截。而后续的 saveUserProperty 却没有被拦截到。

请问,我希望两个函数都被拦截到,有办法解决我的需求么?
分享到:
评论
1 楼 galaxystar 2006-09-18  
这种解决方法很好?

相关推荐

    spring security3 中文版本

    自此之后,Spring Security 成为了 Spring 生态系统中的一个重要组成部分,不断迭代更新,以适应不断变化的安全需求和技术发展。 ##### 1.3 发行版本号 Spring Security 3.0.1 是在 Spring Security 3.0 的基础上...

    spring-security 官方文档 中文版

    自那时起,Spring Security 经历了多个版本的迭代,不断地增强其功能和稳定性。 **1.3 发行版本号** 本文档所指的版本为 Spring Security 3.0.1,这是一个 bug fix 版本,主要针对 3.0 版本中存在的问题进行修复,...

    Spring 框架 web 5.0.4.RELEASE jar

    5. **拦截器**:Spring MVC支持自定义拦截器,可以在请求处理前或后执行额外的操作,如权限检查、日志记录、性能监控等。 6. **数据绑定**:Spring提供了强大的数据绑定机制,可以将HTTP请求参数自动绑定到...

    spring-cglib-repack-3.2.5.jar和spring-objenesis-repack-2.6.jar

    标题中的"spring-cglib-repack-3.2.5.jar"和"spring-objenesis-repack-2.6.jar"是两个与Spring框架相关的库文件,它们主要用于Spring框架的内部实现,尤其是针对Java对象的创建和代理机制。下面将详细解释这两个库的...

    springloaded-1.2.4.RELEASE

    当一个类被修改时,SpringLoaded会拦截类加载请求,如果发现该类已被修改,则会加载新的类版本,而旧的类实例则会被标记为废弃,等到下一次使用时,会创建新的实例。这样就避免了因频繁重启服务器而导致的资源浪费和...

    spring4.1.1相关jar包

    7. **spring-aop-4.1.1.RELEASE.jar**:Spring的AOP模块,提供声明式代理和拦截器,使得开发者可以编写横切关注点,而无需侵入到业务代码中。 8. **spring-expression-4.1.1.RELEASE.jar**:Spring表达式语言(SpEL)...

    Spring2.0jar包

    此jar包提供了动态代理机制,实现了方法拦截和通知,使得非核心业务逻辑可以与主要业务逻辑分离。 3. **spring-core-2.0.6.jar**:这是Spring框架的基础库,包含了基本的类型转换、资源处理和异常处理等功能。它还...

    spring-reference1.1.pdf

    随着版本迭代,Spring框架已经发展成为一个完整的、成熟的应用程序开发平台。Spring框架的核心特性包括但不限于:依赖注入(Dependency Injection, DI)、面向切面编程(Aspect Oriented Programming, AOP)、数据...

    Spring Security 中文教程.pdf

    - **发展历程**:Spring Security的发展历程可以追溯到早期的ACEGI Security项目,后来被集成到Spring框架中,并经过多次迭代更新,形成了如今功能强大且灵活的Spring Security框架。 - **获取方式**: - **项目...

    spring-cglib-repack-3.2.2.jar和spring-objenesis-repack-2.2.jar

    当Spring需要创建一个对象的代理以便于进行AOP(面向切面编程)拦截时,如果目标类没有实现接口,Spring就会使用CGLIB生成一个子类来实现动态代理。CGLIB通过字节码技术动态生成子类,从而在运行时增强目标类的功能...

    Spring+jsp老项目转Springboot的示例Demo

    2. **配置JSP**:由于Spring Boot默认不使用JSP,需要在`src/main/resources/config/web.xml`中创建一个Web配置文件,配置JspServlet来拦截所有Jsp请求。 3. **重写DispatcherServlet配置**:在Spring Boot中,我们...

    spring4.0+hibernate4.2

    Hibernate4.2则是ORM(Object-Relational Mapping)框架的重要迭代,它在数据库操作上提供了强大的支持。Struts2作为MVC(Model-View-Controller)框架的一员,负责处理用户请求和业务逻辑的交互。 首先,让我们深入...

    Spring发展历程

    Spring框架自2004年发布以来,经历了多个版本的迭代和发展,其核心设计理念始终围绕着**依赖注入(DI)**和**面向切面编程(AOP)**。随着云计算、微服务等新兴技术的发展,Spring框架也不断地适应新的技术趋势,...

    spring-security-core-3.1.0.RC1.jar

    3. **Filter Chain**:Spring Security通过一系列过滤器(Filter)实现请求的拦截和处理。在3.1.0.RC1中,这些过滤器如`DelegatingFilterProxy`、`ChannelProcessingFilter`、`SecurityContextPersistenceFilter`等...

    ssm项目框架搭建(springmvc+spring+mybatis)

    SSM项目框架搭建,即Spring MVC、Spring和MyBatis三者的集成,是Java Web开发中常见的技术栈。这三个框架的结合提供了强大的...一旦完成,可以为开发者提供一个稳定、高效的开发环境,方便快速开发和迭代Java Web应用。

    Struts,Spring,Hibernate优缺点

    4. 功能扩展:通过Struts的拦截器机制,可以自定义行为。 然而,Struts也存在一些不足: 1. 性能问题:由于每次请求都会创建新的Action实例,可能导致内存开销较大。 2. 更新较慢:相比其他框架,Struts的更新迭代...

    spring实现登录注册(尚未彻底完善)

    在Spring框架中实现登录注册功能是一项常见的任务,它涉及到用户认证和授权的核心概念。Spring提供了丰富的工具和模块来简化这个过程,包括Spring ...通过不断迭代和优化,可以构建出一个安全、可靠的用户认证系统。

    spring in action 英文版

    10. **Spring Framework版本迭代**:随着技术的发展,Spring不断更新升级,如Spring 5引入了对Reactive编程的支持,以适应现代云计算环境的需求。 通过阅读《Spring in Action》这本书,读者不仅可以深入理解Spring...

    Struts2_Spring3.1_MyBatis3.06整合需要用到的jar包.rar

    Struts2、Spring3.1和MyBatis3.06是Java开发中常见的三大框架,它们各自在不同的层面上提供了强大的功能,并且可以互相整合,以实现更高效的企业级应用开发。本压缩包提供了整合这三大框架所需的核心库文件,下面将...

Global site tag (gtag.js) - Google Analytics