随笔 - 77  文章 - 2  评论 - 3  阅读 - 92303

spring aop实例

1,前置通知;

2,后置通知;

3,环绕通知;

4,返回通知;

5,异常通知;

    1.1定义一个接口

  

1
2
3
4
5
6
7
8
9
package com.java.test6;
 
/**
 * @author nidegui
 * @create 2019-06-23 9:40
 */
public interface Student {
    public void addStudent(String name);
}

 

实现

1
2
3
4
5
6
7
8
9
10
11
12
package com.java.test6;
 
/**
 * @author nidegui
 * @create 2019-06-23 9:41
 */
public class StudentImpl implements  Student {
    @Override
    public void addStudent(String name) {
        System.out.println("添加学生"+name);
    }
}

  

在添加学生之前添加一个切点

package com.java.test6;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;

/**
* @author nidegui
* @create 2019-06-23 9:45
*/
public class StudentServiceAspect {
//前置通知,在方法之前通知
public void before(JoinPoint jp){
System.out.println("类名:"+jp.getTarget().getClass().getName());
System.out.println("方法名:"+jp.getSignature().getName());
System.out.println("开始添加学生:"+jp.getArgs()[0]);

System.out.println("开始添加学生");
}
  //后置通知
public void doAfter(JoinPoint jp){
System.out.println("类名:"+jp.getTarget().getClass().getName());
System.out.println("方法名:"+jp.getSignature().getName());
System.out.println("学生添加完成:"+jp.getArgs()[0]);
}
//环绕通知
public Object doAround(ProceedingJoinPoint pjp) throws Throwable{
System.out.println("添加学生前");
Object retVal=pjp.proceed();
System.out.println(retVal);
System.out.println("添加学生后");
return retVal;
}
  //返回通知
public void doAfterReturning(JoinPoint jp){
System.out.println("返回通知");
}
  //异常通知
public void doAfterThrowing(JoinPoint jp,Throwable ex){
System.out.println("异常通知");
System.out.println("异常信息:"+ex.getMessage());
}


}

  

在配置文件中配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">


<bean id="studentImpl" class="com.java.test6.StudentImpl"></bean>
<bean id="studentAcpect" class="com.java.test6.StudentServiceAspect"></bean>

<aop:config>
<aop:aspect id="studentAcpect" ref="studentAcpect">
<!--定义一个切点-->
<aop:pointcut id="b" expression="execution(* com.java.test6.*.*(..))"></aop:pointcut>
<!--定义前置通知-->
<aop:before method="before" pointcut-ref="b"></aop:before>
<!--后置通知-->
<aop:after method="doAfter" pointcut-ref="b"></aop:after>
<!--环绕通知-->
<aop:around method="doAround" pointcut-ref="b"/>
<!--返回通知-->
<aop:after-returning method="doAfterReturning" pointcut-ref="b"/>
<!--异常通知-->
<aop:after-throwing method="doAfterThrowing" pointcut-ref="b" throwing="ex"/>

</aop:aspect>
</aop:config>
</beans>

  

测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.java.test6;
 
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
/**
 * @author nidegui
 * @create 2019-06-22 14:47
 */
public class Test {
    public static void main(String[] args) {
       ApplicationContext ac = new ClassPathXmlApplicationContext("beanss.xml");
 
        Student people =(Student) ac.getBean("studentImpl");
        people.addStudent("zhangsna");
 
    }
}

 

posted on   nidegui  阅读(3844)  评论(0编辑  收藏  举报
编辑推荐:
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
阅读排行:
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥

点击右上角即可分享
微信分享提示