我希望通过 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 却没有被拦截到。
请问,我希望两个函数都被拦截到,有办法解决我的需求么?
分享到:
- 2006-09-17 21:44
- 浏览 2208
- 评论(1)
- 论坛回复 / 浏览 (1 / 3393)
- 查看更多
相关推荐
自此之后,Spring Security 成为了 Spring 生态系统中的一个重要组成部分,不断迭代更新,以适应不断变化的安全需求和技术发展。 ##### 1.3 发行版本号 Spring Security 3.0.1 是在 Spring Security 3.0 的基础上...
自那时起,Spring Security 经历了多个版本的迭代,不断地增强其功能和稳定性。 **1.3 发行版本号** 本文档所指的版本为 Spring Security 3.0.1,这是一个 bug fix 版本,主要针对 3.0 版本中存在的问题进行修复,...
5. **拦截器**:Spring MVC支持自定义拦截器,可以在请求处理前或后执行额外的操作,如权限检查、日志记录、性能监控等。 6. **数据绑定**:Spring提供了强大的数据绑定机制,可以将HTTP请求参数自动绑定到...
标题中的"spring-cglib-repack-3.2.5.jar"和"spring-objenesis-repack-2.6.jar"是两个与Spring框架相关的库文件,它们主要用于Spring框架的内部实现,尤其是针对Java对象的创建和代理机制。下面将详细解释这两个库的...
当一个类被修改时,SpringLoaded会拦截类加载请求,如果发现该类已被修改,则会加载新的类版本,而旧的类实例则会被标记为废弃,等到下一次使用时,会创建新的实例。这样就避免了因频繁重启服务器而导致的资源浪费和...
7. **spring-aop-4.1.1.RELEASE.jar**:Spring的AOP模块,提供声明式代理和拦截器,使得开发者可以编写横切关注点,而无需侵入到业务代码中。 8. **spring-expression-4.1.1.RELEASE.jar**:Spring表达式语言(SpEL)...
此jar包提供了动态代理机制,实现了方法拦截和通知,使得非核心业务逻辑可以与主要业务逻辑分离。 3. **spring-core-2.0.6.jar**:这是Spring框架的基础库,包含了基本的类型转换、资源处理和异常处理等功能。它还...
随着版本迭代,Spring框架已经发展成为一个完整的、成熟的应用程序开发平台。Spring框架的核心特性包括但不限于:依赖注入(Dependency Injection, DI)、面向切面编程(Aspect Oriented Programming, AOP)、数据...
- **发展历程**:Spring Security的发展历程可以追溯到早期的ACEGI Security项目,后来被集成到Spring框架中,并经过多次迭代更新,形成了如今功能强大且灵活的Spring Security框架。 - **获取方式**: - **项目...
当Spring需要创建一个对象的代理以便于进行AOP(面向切面编程)拦截时,如果目标类没有实现接口,Spring就会使用CGLIB生成一个子类来实现动态代理。CGLIB通过字节码技术动态生成子类,从而在运行时增强目标类的功能...
2. **配置JSP**:由于Spring Boot默认不使用JSP,需要在`src/main/resources/config/web.xml`中创建一个Web配置文件,配置JspServlet来拦截所有Jsp请求。 3. **重写DispatcherServlet配置**:在Spring Boot中,我们...
Hibernate4.2则是ORM(Object-Relational Mapping)框架的重要迭代,它在数据库操作上提供了强大的支持。Struts2作为MVC(Model-View-Controller)框架的一员,负责处理用户请求和业务逻辑的交互。 首先,让我们深入...
Spring框架自2004年发布以来,经历了多个版本的迭代和发展,其核心设计理念始终围绕着**依赖注入(DI)**和**面向切面编程(AOP)**。随着云计算、微服务等新兴技术的发展,Spring框架也不断地适应新的技术趋势,...
3. **Filter Chain**:Spring Security通过一系列过滤器(Filter)实现请求的拦截和处理。在3.1.0.RC1中,这些过滤器如`DelegatingFilterProxy`、`ChannelProcessingFilter`、`SecurityContextPersistenceFilter`等...
SSM项目框架搭建,即Spring MVC、Spring和MyBatis三者的集成,是Java Web开发中常见的技术栈。这三个框架的结合提供了强大的...一旦完成,可以为开发者提供一个稳定、高效的开发环境,方便快速开发和迭代Java Web应用。
4. 功能扩展:通过Struts的拦截器机制,可以自定义行为。 然而,Struts也存在一些不足: 1. 性能问题:由于每次请求都会创建新的Action实例,可能导致内存开销较大。 2. 更新较慢:相比其他框架,Struts的更新迭代...
在Spring框架中实现登录注册功能是一项常见的任务,它涉及到用户认证和授权的核心概念。Spring提供了丰富的工具和模块来简化这个过程,包括Spring ...通过不断迭代和优化,可以构建出一个安全、可靠的用户认证系统。
10. **Spring Framework版本迭代**:随着技术的发展,Spring不断更新升级,如Spring 5引入了对Reactive编程的支持,以适应现代云计算环境的需求。 通过阅读《Spring in Action》这本书,读者不仅可以深入理解Spring...
Struts2、Spring3.1和MyBatis3.06是Java开发中常见的三大框架,它们各自在不同的层面上提供了强大的功能,并且可以互相整合,以实现更高效的企业级应用开发。本压缩包提供了整合这三大框架所需的核心库文件,下面将...