Spring AOP學習(一)

最近在看spring aop的內容,在這作個筆記。 1、介紹 一、瞭解編程範式: (1)面向過程編程:C語言 (2)面向對象編程:Java、C++ (3)函數式編程 (4)事件驅動編程:GUI (5)面向切面編程:AOPphp

二、AOP是什麼? 是一種編程方式,不是編程語言。 解決特定問題,不是全部問題 aop是面向對象編程的補充c++

三、Aop初衷: DRY:Don’t repeat yourself 不用重複代碼 SoC:Separation of Concenrns 關注點分離 水平分離:展現層、服務層、持久層 垂直分離:模塊劃分(訂單、庫存) 切面分離:分離功能性需求和非功能性需求spring

四、Aop好處: 集中處理管理某一關注點/橫切邏輯 能夠很方便添加、刪除關注點 侵入性少,加強代碼可讀性以及維護性編程

五、Aop應用場景 權限控制 緩存控制 事務控制 審計日誌 性能監控 分佈式追蹤 異常處理緩存

六、支持AOP的編程語言:Java、 .net.、 c/c++、 ruby、Python 、php等等,包括面嚮對象語言,也包括腳本語言ruby

2、AOP的簡單實現 主要步驟有: (1)引入aop maven 依賴; (2)編寫切面代碼(主要用到@Aspect、@Pointcut和通知註解); (3)編寫單元測試,運行。maven

主要代碼: 一、maven依賴:編程語言

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

二、業務邏輯類:分佈式

@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();
	}
}

三、切面類:函數式編程

@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");
//	}
	
}

四、單元測試類

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

	@Test
	public void contextLoads() throws Exception {
		productServie.saveProduct();
//		productServie.deleteProduct();
//		productServie.deleteProduct_throwWrong();
	}
	
}
相關文章
相關標籤/搜索