Spring的AOP的總結

SpringAOP

SpringAOP:面向切面編程,常見應用場景有權限、事務、控制、日誌等。
SpringAOP的原理:使用cglib代理設計模式。

用註解來模擬一下Spring的AOP

1、創建一個切面類=

/**
 * 定義一個切面類
 * @author 紫炎易霄
 */
@Component
@Aspect
public class TranAop {
	@Before("execution(* com.zyyx.service.UserService.*(..))")
	public void before(){
		System.out.println("前置通知!");
	}
	@After("execution(* com.zyyx.service.UserService.*(..))")
	public void after(){
		System.out.println("後置通知!");
	}
	@AfterThrowing("execution(* com.zyyx.service.UserService.*(..))")
	public void throwing(){
		System.out.println("異常通知!");
	}
	@AfterReturning("execution(* com.zyyx.service.UserService.*(..))")
	public void returning(){
		System.out.println("返回通知!");
	}
	@Around("execution(* com.zyyx.service.UserService.*(..))")
	public void arounding(ProceedingJoinPoint pJoinPoint) throws Throwable{
		System.out.println("環繞通知的開頭!");
		pJoinPoint.proceed();
		System.out.println("環繞通知的結尾!");
		
	}
}

2、寫一個dao和service

/**
 * dao
 * @author 紫炎易霄
 */
@Repository
public class UserDao {
	public void work(){
		System.out.println("我正在執行插入數據的操作!");
	}
}
/**
 * service
 * @author 紫炎易霄
 */
@Service
public class UserService {
	@Autowired
	private UserDao userDao;
	public void work(){
		userDao.work();
	}
}

3、beans.xml文件的配置

<!-- 開啓dao和service的掃描註解 -->
        <context:component-scan base-package="com.zyyx"/>
        <!-- 開啓aop註解 -->
        <aop:aspectj-autoproxy/>

4、、單元測試

public class TestSpringAop {
	public static void main(String[] args) {
		ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
		UserService userService = (UserService) ac.getBean("userService");
		userService.work();
	}
}

運行結果在這裏插入圖片描述

用XML來模擬一下Spring的AOP

1、將切面類的註解清空

/**
 * 定義一個切面類
 * @author 紫炎易霄
 */
public class TranAop {
	public void before(){
		System.out.println("前置通知!");
	}
	public void after(){
		System.out.println("後置通知!");
	}
	public void throwing(){
		System.out.println("異常通知!");
	}
	public void returning(){
		System.out.println("返回通知!");
	}
	public void arounding(ProceedingJoinPoint pJoinPoint) throws Throwable{
		System.out.println("環繞通知的開頭!");
		pJoinPoint.proceed();
		System.out.println("環繞通知的結尾!");
	}
}

2、配置xml文件

 <!-- 開啓dao和service的掃描註解 -->
        <context:component-scan base-package="com.zyyx"/>
        <bean id="tranAop" class="com.zyyx.aop.TranAop" />
		<!-- aop的配置 -->
		<aop:config>
			<!-- 切入點 -->
			<aop:pointcut expression="execution(* com.zyyx.service.UserService.*(..))" id="point"/>
			<!-- 切面 -->
			<aop:aspect ref="tranAop">
				<!-- 通知 -->
				<aop:before method="before" pointcut-ref="point"/>
				<aop:after method="after" pointcut-ref="point"/>
				<aop:after-throwing method="throwing" pointcut-ref="point"/>
				<aop:around method="arounding" pointcut-ref="point"/>
				<aop:after-returning method="returning" pointcut-ref="point"/>
			</aop:aspect>
		</aop:config>

在這裏插入圖片描述
運行結果
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章