
java方法设置切点_java相关:Spring AOP中定义切点的实现方法示例
发布日期:2021-05-10 05:24:00
浏览次数:13
分类:精选文章
本文共 2696 字,大约阅读时间需要 8 分钟。
Spring AOP切点实现示例
本文将通过详细例子,讲述Spring AOP中定义切点的实现方法。
一、配置
在Spring AOP中,首先需要配置支持AspectJ的环境。以下是配置文件的示例:
二、切面类 SystemArchitecture
创建一个AspectJ切面类,定义切点。以下是系统架构切面的实现:
package org.crazyit.app.aspect;import org.aspectj.lang.annotation.*;@Aspectpublic class SystemArchitecture { @Pointcut("execution(* org.crazyit.app.service.impl.*.*(..))") public void myPointcut() {}}
三、切面类 LogAspect
LogAspect 切面基于 SystemArchitecture 的切点来实现日志功能。以下是实现代码:
package org.crazyit.app.aspect;import org.aspectj.lang.annotation.*;import org.aspectj.lang.*;@Aspectpublic class LogAspect { // 使用 SystemArchitecture 切面的切点 @AfterReturning(returning="rvt") @Pointcut("SystemArchitecture.myPointcut()") public void log(Object rvt) { System.out.println("获取目标方法返回值:" + rvt); System.out.println("模拟记录日志功能..."); }}
四、接口 Hello
定义一个简单的Hello接口。以下是接口代码:
package org.crazyit.app.service;public interface Hello { void foo(); int addUser(String name, String pass);}
五、实现类 HelloImpl
实现Hello接口,定义切点被激活的方法。以下是实现代码:
package org.crazyit.app.service.impl;import org.springframework.stereotype.Component;import org.crazyit.app.service.*;@Component("hello")public class HelloImpl implements Hello { public void foo() { System.out.println("执行Hello组件的foo()方法"); } public int addUser(String name, String pass) { System.out.println("执行Hello组件的addUser添加用户:" + name); if (name.length() > 10) { throw new IllegalArgumentException("name参数的长度必须大于3,小于10!"); } return 20; }}
六、实现类 WorldImpl
类似的,World组件的实现如下:
package org.crazyit.app.service.impl;import org.springframework.stereotype.Component;import org.crazyit.app.service.*;@Component("world")public class WorldImpl implements World { public void bar() { System.out.println("执行World组件的bar()方法"); }}
七、测试类
测试应用的切面行为是否生效。以下是测试代码:
package lee;import org.springframework.context.*;import org.springframework.context.support.*;import org.crazyit.app.service.*;public class BeanTest { public static void main(String[] args) { // 创建Spring容器 ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); Hello hello = ctx.getBean("hello", Hello.class); hello.foo(); int result = hello.addUser("孙悟空", "7788"); System.out.println("目标方法返回值:" + result); World world = ctx.getBean("world", World.class); world.bar(); }}
测试结果
运行测试类可观察到以下输出:
- 执行Hello组件的foo()方法
- 获取目标方法返回值: null
- 模拟记录日志功能...
- 执行Hello组件的addUser添加用户:孙悟空
- 获取目标方法返回值: 20
- 模拟记录日志功能...
- 执行World组件的bar()方法
- 获取目标方法返回值: null
- 模拟记录日志功能...
以上示例展示了如何使用Spring AOP定义切点并实现切面功能,具体化的方法展示了实际应用场景的复杂度和灵活性。
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年04月02日 13时58分59秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
C中几道位运算的例题
2019-03-07
python入门(二)基础知识
2019-03-07
推荐几个微信Markdown排版工具
2019-03-07
golang log4go 使用说明及丢失日志原因
2019-03-07
C++ 笔记(17)— 类和对象(构造函数、析构函数)
2019-03-07
File Name
2019-03-07
Android Studio打包生成Jar包的方法
2019-03-07
华为路由器配置VRRP
2019-03-07
Excel 如何根据单元格中的值设立不同的颜色(或渐变)?(222)
2019-03-07
python 文件操作 open()与with open() as的区别(打开文件)
2019-03-07
Git中pull,commit和push的概念
2019-03-07
python中列表 元组 字典 集合的区别
2019-03-07
python struct 官方文档
2019-03-07
中级软考 计算机指令执行过程(取指、分析、执行)计算机重叠流水线问题
2019-03-07
摄像头捕获视频流软件AMCAP使用教程(视频采集捕获处理媒体制作微型软件)
2019-03-07