到今天已经使用Mybatis完成了公司交给的demo程序的增删改查,以后有时间把自己的代码结果发上来供大家拍砖,这次要说的是,需求中需要在每个方法执行的时候打印一下系统执行的时间,我使用类似事务管理的aop方式在xml中配置如下。
<!-- 配置事务 -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<tx:annotation-driven transaction-manager="txManager" />
<!-- 以AspectJ方式 定义 AOP -->
<aop:config proxy-target-class="true" >
<aop:advisor pointcut="execution(* com.best.staff.service.impl.*ServiceImpl.*(..))" advice-ref="txAdvice" />
<aop:advisor pointcut="execution(* com.best.staff.controller.*Controller.*(..))" advice-ref="methodTimeAdvice" />
</aop:config>
<!-- 打印方法执行时间 -->
<bean id="methodTimeAdvice" class="com.best.staff.util.MethodTimeAdvice"/>
<!-- 基本事务定义,使用transactionManager作事务管理,默认get*,find*方法的事务为readonly,其余方法按默认设置.默认的设置请参考Spring文档事务一章. -->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="get*" read-only="true" />
<tx:method name="find*" read-only="true" />
<tx:method name="query*" read-only="true" />
<tx:method name="*" />
</tx:attributes>
</tx:advice>
发现当调用controller方法的时候根本不会进入,但是我把serviceImpl的advice-ref改成methodAdvice的时候发现能够进入执行对应的方法。然后从网上查了一下发现。
主要有两个解决方法:第一个是添加下载aspectj-1.6.10.jar和aspectjweaver-1.6.9 事实证明只对了一部分 第二个方法是修改servlet.xml去掉 <mvc:annotation-driven/>然后添加 <aop:aspectj-autoproxy proxy-target-class="true"/>然后我按照这个方式结果老是包异常说什么。
nested exception is java.lang.ClassCastException: org.aspectj.weaver.ResolvedType$Array cannot be cast to org.aspectj.weaver.ReferenceType
后来找到原因是我工程里老的aspectjweaver-1.5的jar包没有删掉,删掉之后就ok了。现在整个项目的servlet.xml内容为:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"
default-autowire="byName" default-lazy-init="false">
<mvc:annotation-driven/>
<!-- <context:annotation-config /> -->
<aop:aspectj-autoproxy proxy-target-class="true"/>
<context:component-scan base-package="com.best.staff.controller" />
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/</value>
</property>
<property name="suffix">
<value></value>
</property>
<property name="contentType" value="text/html;charset=utf8"></property>
</bean>
</beans>
分享到:
相关推荐
通过对这个简单的AOP拦截器实现的学习,我们可以进一步探索如何结合注解驱动的AOP、环绕通知(`Around Advice`)、代理模式的实现细节、以及如何在实际项目中利用AOP解决实际问题。AOP是Spring框架的强大工具,理解...
标题中的“在自定义Spring AOP中使用EL获取拦截方法的变量值”指的是在Spring的面向切面编程(AOP)中,通过Expression Language(EL,表达式语言)来访问被拦截方法的局部变量值。这通常涉及到Spring的代理机制、...
在Spring AOP(面向切面编程)中,我们可以通过定义拦截器来实现对系统操作日志和异常日志的记录,这些日志信息通常会被存储到数据库中以便于后续的分析和故障排查。下面将详细介绍如何使用Spring AOP实现这个功能。...
本文将详细介绍如何使用AspectJ注解在Spring MVC中实现AOP拦截Controller方法,并提供一个具体的例子。 首先,我们需要了解Spring AOP的基础概念。AOP允许我们定义“切面”,这些切面包含了业务逻辑中横切关注点的...
Spring框架是Java开发中不可...总结,Spring框架的IoC和AOP特性极大地简化了Java开发,通过依赖注入解耦了组件,通过面向切面编程解决了共性问题。理解并熟练掌握这些概念和机制,对于提升开发效率和代码质量至关重要。
在描述中提到的问题,用户在尝试使用Spring AOP的注解`@Aspect`时遇到了没有提示的情况。这通常是因为缺少了相关的jar包依赖。Spring AOP的实现离不开Spring核心库以及AOP联盟(AOP Alliance)的jar包。在Spring 3.2...
然后,如果配置了`exposeProxy`,Spring会将当前的代理对象暴露到`AopContext`中,以便在拦截器中可以访问到这个代理对象,这对于某些场景下获取拦截器链中的其他拦截器或者代理信息非常有用。 在所有这些准备工作...
值得注意的是,Struts2_Spring整合过程中可能会遇到如依赖冲突、配置问题等挑战,因此熟悉两种框架的原理和配置细节至关重要。同时,随着技术的发展,现代Web开发更多倾向于使用Spring Boot这类一站式解决方案,但...
5. IntroductionInterceptor(引入拦截器):用于向目标对象添加新的字段或方法。 五、Spring AOP切入点 1. Pointcut:定义了匹配特定Joinpoint的规则,包括ClassFilter和MethodMatcher。 2. ClassFilter:匹配类...
3. `AspectJAutoProxyCreator`:基于AspectJ的自动代理创建器,根据配置的切面信息生成代理对象。 四、应用实践 在实际开发中,Spring AOP广泛应用于日志记录、事务管理、性能监控等方面。例如,可以通过声明式...
在IT行业中,Spring AOP(面向切面编程)和EhCache是两个非常重要的概念,它们在提升应用程序性能和管理缓存方面发挥着关键作用。本文将深入探讨如何结合Spring AOP与EhCache实现一个简单的缓存实例,以便优化Java...
Spring AOP,全称为Spring Aspect-Oriented ...总之,Spring AOP提供了一种优雅的方式来处理系统的共性问题,使得代码更易于理解和维护。正确配置和使用上述JAR包,可以帮助你在Java应用中有效地实现面向切面的编程。
在IT领域,拦截器、OGNL(Object-Graph Navigation Language)和AOP(Aspect-Oriented Programming,面向切面编程)是三个非常重要的概念,它们分别在不同的层面为软件开发提供便利。以下是对这些概念的详细说明: ...
`MethodBeforeAdviceInterceptor`、`AfterReturningAdviceInterceptor`等类实现了不同类型的拦截器。 十、实战分析 导入Spring AOP源码到Eclipse工程后,可以通过调试和阅读源码,了解通知的创建、切点的匹配、代理...
本文将深入探讨Spring MVC拦截器的原理、配置以及如何创建自定义拦截器。 首先,了解拦截器的基本概念。拦截器是AOP(面向切面编程)思想在Spring MVC中的体现,它通过在请求到达目标控制器之前插入额外的处理步骤...
在Spring AOP中,你可以使用AspectJ的注解或XML配置来定义切面,并利用AspectJ的编译器或加载器实现切面织入,提高性能。 接着是`aspectjweaver-1.7.1.jar`,它是AspectJ运行时的核心库。这个jar包包含了运行时代理...
拦截器是Spring MVC提供的一种AOP(面向切面编程)特性,允许我们在请求处理之前、之后或者在视图渲染之后进行一些预处理或后处理操作。我们可以利用拦截器来实现对HTTP请求的过滤,包括修改请求参数、日志记录、...
通过对Spring AOP源码的深入分析,我们可以了解到其内部是如何通过代理模式和反射技术实现对方法调用的拦截,以及如何解析和执行切点表达式,理解通知的执行流程等。这些深入理解对于优化性能、排查问题以及自定义...
在Spring AOP中,切面可以由Advisor(通知+切入点)或者拦截器实现。 - **通知**(Advice):定义了切面如何改变程序行为的信息,它是在特定连接点上执行的动作。 - **切入点**(Pointcut):定义了何时何处执行通知...
再者,`aopalliance-1.0.jar`是AOP联盟的库,它是多个AOP框架之间的一个接口标准,定义了一些基本的拦截器和通知接口,使得不同的AOP框架可以互相协作。Spring AOP就是基于这个接口与其它AOP框架(如AspectJ)进行...