Java 11.Spring--AOP编程(注解)

1.创建web项目

2.引入jar包

在原有的jar包加上AOP的jar包

3.日志

 

4.准备目标对象

先创建接口

在创建实现类

 

package com.Spring.aop.service;

public class UserServceImpl implements UserService {

	@Override
	public void save() {
		System.out.println("保存用户");
		// TODO Auto-generated method stub
		
	}

	@Override
	public void delete() {
		System.out.println("删除用户");
		// TODO Auto-generated method stub
		
	}

	@Override
	public void update() {
		System.out.println("更新用户");
		// TODO Auto-generated method stub
		
	}

	@Override
	public void select() {
		System.out.println("查询用户");
		// TODO Auto-generated method stub
		
	}
	 

}

 

  

 

 

5.编写通知

前置通知:在目标方法之前调用

后置通知(如果出现异常就不调用):在目标方法之后调用

后置通知(无论是否出现异常都会调用):在目标方法之后调用

环绕通知:在目标方法之后调用

异常通知:出现异常调用

package com.Spring.aop.advice;

import org.aspectj.lang.ProceedingJoinPoint;

public class TransactionAdvice {
//	前置通知:在目标方法之前调用
//
//	后置通知(如果出现异常就不调用):在目标方法之后调用
//
//	后置通知(无论是否出现异常都会调用):在目标方法之后调用
//
//	环绕通知:在目标方法之后调用
//
//	异常通知:出现异常调用
	public void before() {
		System.out.println("前置通知被执行");
	}
	
	public void afterReturning() {
		System.out.println("后置通知(如果出现异常就不调用)");
		
	}
	public void after() {
		System.out.println("后置通知(无论是否出现异常都会调用)");
		
	}
	public void afterException() {
		System.out.println("异常通知被执行");
	}
	public Object around(ProceedingJoinPoint point) throws Throwable {
		System.out.println();
		Object proceed = point.proceed();
		return proceed;
		
	}

}

  

 

6.配置织入,将通知织入到目标对象

 

		<!-- 目标对象 -->
       	<bean name="userServce" class= "com.Spring.aop.service.UserServceImpl"></bean>
		<!-- 通知对象 -->
		<bean name="transactionAdvice" class= "com.Spring.aop.advice.TransactionAdvice" ></bean>
		<!-- 开启织入注解 -->
		<aop:aspectj-autoproxy></aop:aspectj-autoproxy>

 

  

 

加入AOP名称空间

7.在通知上添加注解

 

package com.Spring.aop.advice;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;

@Aspect
public class TransactionAdvice {
//	前置通知:在目标方法之前调用
//
//	后置通知(如果出现异常就不调用):在目标方法之后调用
//
//	后置通知(无论是否出现异常都会调用):在目标方法之后调用
//
//	环绕通知:在目标方法之后调用
//
//	异常通知:出现异常调用
	@Pointcut("execution(. com.Spring.aop.service..*ServceImpl.*(..))")
	public void pointcut() {
		
	}
	
	
	@Before("TransactionAdvice.pointcut")
	public void before() {
		System.out.println("前置通知被执行");
	}
	@AfterReturning("TransactionAdvice.pointcut")
	public void afterReturning() {
		System.out.println("后置通知(如果出现异常就不调用)");
		
	}
	@After("TransactionAdvice.pointcut")
	public void after() {
		System.out.println("后置通知(无论是否出现异常都会调用)");
		
	}
	@AfterThrowing("TransactionAdvice.pointcut")
	public void afterException() {
		System.out.println("异常通知被执行");
	}
	@Around("TransactionAdvice.pointcut")
	public Object around(ProceedingJoinPoint point) throws Throwable {
		System.out.println("环绕前");
		Object proceed = point.proceed();
		System.out.println("环绕后");
		return proceed;
		
	}

}

 

  

 

 

7.测试

 

package com.Spring.aop.service;

import javax.annotation.Resource;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class AopTest {
	@Resource(name="userService")
	private UserService userService; 
	
	@Test
	public void testSave() {
		userService.save("yu jack");
	}
	
	@Test
	public void testUpdate() {
		userService.update();
	}
	
}

 

  

posted @ 2020-01-10 17:01  Recruited  阅读(213)  评论(0编辑  收藏  举报
个人网站:www.yuzhenfu.cn