一.注解方式
打开注解<aop:scoped-proxy />
定义拦截类和注入对象
<bean id="personService" class="com.hx.sprindemo01.service.impl.PersonServiceImpl"/>
<bean id="MyInterceptor" class="com.hx.sprindemo01.service.impl.MyInterceptor"/>
定义切面
@Aspect
public class MyInterceptor {
定义切入点
@Pointcut("execution(* com.hx.sprindemo01.service.impl.PersonServiceImpl.*(..))")
public void anyMethod() {}
定义通知
@Before("anyMethod()&& args(user)")//拦截到参数值
public void dosm(String user){
System.out.println("前置函数"+user);
}
@AfterReturning(pointcut="anyMethod()",returning="result")拦截到返回值
public void doend(String result){
System.out.println("后置函数result"+result);
} @After("anyMethod()")
public void doAfter(){
System.out.println("最终通知");
}
@AfterThrowing("anyMethod()")
public void doAfterThrowing(){
System.out.println("例外通知");
}
@Around("anyMethod()")
public Object doBasicProfiling(ProceedingJoinPoint pjp)throws Throwable{
System.out.println("进入方法");
Object result = pjp.proceed();
System.out.println("退出方法");
return result;
}
}
二.配置文件方式
<aop:aspectj-autoproxy/>
<bean id="personService" class="com.hx.sprindemo01.service.impl.PersonServiceImpl"/>
<bean id="MyInterceptor2" class="com.hx.sprindemo01.service.impl.MyInterceptor2"/>
<aop:config>
<aop:aspect id="myaop" ref="MyInterceptor2">
<aop:pointcut id="mycut" expression="execution(* com.hx.sprindemo01.service.impl.PersonServiceImpl.*(..))"/>
<aop:before pointcut-ref="mycut" method="dosm"/>
<aop:after-returning pointcut-ref="mycut" method="doend"/>
<aop:after-throwing pointcut-ref="mycut" method="doAfterThrowing"/>
<aop:after pointcut-ref="mycut" method="doAfter"/>
<aop:around pointcut-ref="mycut" method="doBasicProfiling"/>
</aop:aspect>
</aop:config>
配置参数,只要修改expression内容就可以了
execution(java.lang.String com.hx.sprindemo01.service.impl.PersonServiceImpl.*(..))
execution(* com.hx.sprindemo01.service.impl.PersonServiceImpl.*(java.lang.String,..))
execution(!void com.hx.sprindemo01.service.impl.PersonServiceImpl.*(java.lang.String,..))
类中方法
execution(* com.hx.sprindemo01.service.impl.PersonServiceImpl.*(java.lang.String,..))
包下所有类
execution(* com.hx.sprindemo01.service.impl..*.*(..))
表达式常见错误:第一个星号后面加空格
分享到:
相关推荐
spring入门学习-5、AOP概念及特点.pdf
Spring -AoSprinSpring -Aop入门g -Aop入门p入门
spring入门学习-6、AOP几种配置方式详解.pdf
spring2-aop入门实例教程 spring2-aop入门实例教程
死磕spring源码系列-SpringAop十分钟快速入门
spring AOP入门教程
用spring AOP做的最简单的日志记录小例子,特别简单,可直接运行。
使用spring实现AOP的一个简单实例,很好的一个入门例子
Spring AOP 入门 作者:廖雪峰
2.3 AOP 入门案例 2.3.1 创建一个SpringBoot的module 2.3.1 导入jar包 2.3.2 项目工程结构 2.3.3 配置类 2.3.4 Service层 2.3.4.1 接口 2.3.4.2 实现类 2.3.5 切入点表达式 2.3.6 定义切面类 2.3.7 让AOP生效 2.3.8 ...
Spring_Aop入门例子,可以直接导入,里面有Spring需要的jar包
java Spring 入门AOP所需要的材料 帮助更多人入门aop
压缩包内包含了众多spring学习资料如:Spring从入门到精通.pdf ,spring+...spring事务.pdf,Spring_Framework-3-AOP.ppt,Spring-Hibernate_Frameworks.ppt等学习资料 都是经过我认真帅选过的学习资料,分享给大家用一用
一. 准备工作 二. Spring -Aop入门 三. Spring-Aop 前置通知、后置通知、环绕通知、异常通知实现 四. Spring-Aop 之Pointcut+advice+Advisor 实现 五.Spring-Aop 引入的介绍
spring的aop简单例子spring的aop简单例子spring的aop简单例子spring的aop简单例子
最简单的SpringAOP入门案例,对于配置文件有详细的解释,适合初学者去理解AOP编程
该项目包含helloworld(快速入门)、web(ssh项目快速搭建)、aop(切面编程)、data-redis(redis缓存)、quartz(集群任务实现)、shiro(权限管理)、oauth2(四种认证模式)、shign(接口参数防篡改重放)、encoder(用户...
配套教材,里面的代码测试过都是可运行的,配套学习很方便
Spring AOP简单demo 入门级的 advice