-
designators
查看全部 -
2-4对象匹配
查看全部 -
匹配包/类型
查看全部 -
designators表达式介绍
查看全部 -
Operators运算符介绍
查看全部 -
Wildcards通配符介绍
查看全部 -
2-2 切面表达式介绍
查看全部 -
AOP實現時的 service.ProductService
service.AuthService.checkAcess() 被移到了security.SecurityAspect了
查看全部 -
非AOP實現時的 service.ProductService
查看全部 -
// AOP 實現
定義 annotation標註(@interface AdminOnly)
定義 aspect剖面 (class SecurityAspect)
在剖面裡建立 pointcut切入點 (@Pointcut(指定器))
@Pointcut("@annotation(AdminOnly)")
public void adminOnly(){} // 切入函數
在剖面裡建立 advice(@Before("切入函數名"))
@Before("adminOnly")
public void check(){} // advice函數
查看全部 -
// test product service
@Test(expected = Exception.class) // 拋出異常則通過測試
匿名刪除測試(){
security.CurrentUserHolder.set("匿名")
service.ProductService.delete() // 將會拋出異常
}
@Test // 不拋出異常則通過測試
管理員刪除測試() {
security.CurrentUserHolder.set("管理員")
service.ProductService.delete() // 不會拋出異常
}
查看全部 -
service.AuthService
check() { // throws RuntimeException
securtiy.CurrentUserHolder.get()
}
查看全部 -
security.CurrentUserHolder
static get()/set()
查看全部 -
domain.Product
查看全部 -
注意此處的Proxy是來至於jdk,而不是剛才自定義的那個pattern.Proxy
所以,靜態代理自定義一個代理類,動態代理則是實現一個InvocationHandler接口的代理類
動態代理使用java.lang.reflect提供的Proxy工廠類,再傳入接口(Subject)、與目標對象
查看全部
举报