Spring AOP学习(一)

本文介绍了面向切面编程(AOP)的概念及其在Spring框架中的应用。通过实例演示了如何使用AOP来处理横切关注点,如日志记录、安全控制等,并提供了具体的代码示例。

最近在看spring aop的内容,在这做个笔记。 一、介绍 1、了解编程范式: (1)面向过程编程:C语言 (2)面向对象编程:Java、C++ (3)函数式编程 (4)事件驱动编程:GUI (5)面向切面编程:AOP

2、AOP是什么? 是一种编程方式,不是编程语言。 解决特定问题,不是所有问题 aop是面向对象编程的补充

3、Aop初衷: DRY:Don’t repeat yourself 不用重复代码 SoC:Separation of Concenrns 关注点分离 水平分离:展示层、服务层、持久层 垂直分离:模块划分(订单、库存) 切面分离:分离功能性需求和非功能性需求

4、Aop好处: 集中处理管理某一关注点/横切逻辑 可以很方便添加、删除关注点 侵入性少,增强代码可读性以及维护性

5、Aop应用场景 权限控制 缓存控制 事务控制 审计日志 性能监控 分布式追踪 异常处理

6、支持AOP的编程语言:Java、 .net.、 c/c++、 ruby、Python 、php等等,包括面向对象语言,也包括脚本语言

二、AOP的简单实现 主要步骤有: (1)引入aop maven 依赖; (2)编写切面代码(主要用到@Aspect、@Pointcut和通知注解); (3)编写单元测试,运行。

主要代码: 1、maven依赖:

 		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-aop</artifactId>
		</dependency>

2、业务逻辑类:

@Service
public class ProductService{

	public void saveProduct() {
		System.out.println("save product now ……");
	}

	public void deleteProduct() {
		System.out.println("delete product now ……");
	}
	
	public void deleteProduct_throwWrong() throws Exception {
		System.out.println("delete product and throw exception now ……");
		throw new Exception();
	}
}

3、切面类:

@Aspect
@Component
public class AspectTest {

	@Pointcut("within(cn.exercise.service.impl.ProductService)")
	public void adminOnly() {

	}

	@Before("adminOnly()")
	public void before() {
		System.out.println("------------ @Aspect ###before");
	}
	
//	@After("adminOnly()")
//	public void after() {
//		System.out.println("------------ @Aspect ###after");
//	}
	
//	@AfterReturning("adminOnly()")
//	public void afterReturning() {
//		System.out.println("------------ @Aspect ###afterReturning");
//	}
	
//	@AfterThrowing("adminOnly()")
//	public void after() {
//		System.out.println("------------ @Aspect ###afterThrowing");
//	}
	
//	@Around("adminOnly()")
//	public void Around(ProceedingJoinPoint joinPoint) {
//		System.out.println("------------ @Aspect ###around--before");
//		try {
//			joinPoint.proceed();
//		} catch (Throwable e) {
//			System.out.println("------------ @Aspect ###around--throwable");
//		} finally {
//			System.out.println("------------ @Aspect ###around--after");
//		}
//		System.out.println("------------ @Aspect ###around--last");
//	}
	
}

4、单元测试类

@RunWith(SpringRunner.class)
@SpringBootTest
public class AopTestApplicationTests {
	
	@Autowired
	private ProductService productServie;

	@Test
	public void contextLoads() throws Exception {
		productServie.saveProduct();
//		productServie.deleteProduct();
//		productServie.deleteProduct_throwWrong();
	}
	
}

转载于:https://my.oschina.net/u/3696939/blog/1547425

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值