Spring的aop注解配置

Spring的aop注解配置
一、导包
二、准备目标类和代理类
目标类代码

package cn.itheima.aspring;

public interface MySpring {
 void add();
 void delect();
 void select();
}

package cn.itheima.aspring;
//目标类
public class DongTai implements MySpring {
	
	public void add() {
		System.out.println("添加用户!!!");

	}

	public void delect() {
		System.out.println("删除用户!!!");

	}

	public void select() {
		System.out.println("查看用户!!!");
	}

}

代理类代码

package cn.itheima.aspring;

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;

//通知类(切面类)
@Aspect
public class MyAspect {
	//前置通知
	@Before("execution(* cn.itheima.aspring.DongTai.*(..))")
	public void before() {
		System.out.println("这是前置通知!!!");
	}
	//后置通知
	@After("execution(* cn.itheima.aspring.DongTai.*(..))")
	public void after() {
		System.out.println("这是后置通知!!!");
	}
	//环绕通知
	@Around("execution(* cn.itheima.aspring.DongTai.*(..))")
	public Object surround(ProceedingJoinPoint pjp) throws Throwable {
		System.out.println("这是环绕通知之前");
		Object proceed = pjp.proceed();
		System.out.println("这是环绕通知之后");
		return proceed;
	}
	//异常通知
	@AfterThrowing("execution(* cn.itheima.aspring.DongTai.*(..))")
	public void exceedingly() {
		System.out.println("这是异常通知");
	}
	@AfterReturning("execution(* cn.itheima.aspring.DongTai.*(..))")
	public void after1(){
		System.out.println("这是后置通知(出现异常也会调用)!!");
	}
}

三、配置xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd " xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<!--1.引入aop约束  -->
	<!--2.目标类  -->
	<bean name="DongTai" class="cn.itheima.aspring.DongTai"></bean>
	<!-- 3.切面类/代理类 -->
	<bean name="MyAspect" class="cn.itheima.aspring.MyAspect"></bean>
	<!--开启使用注解完成织入  -->
	<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
</beans>

四、测试代码

package cn.itheima.aspring;

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)
//加载xml文件
@ContextConfiguration("classpath:demo/applicationContext.xml")
public class Demo {
	@Resource(name="DongTai")
	private MySpring u1;
@Test
	public void fun1() {
	System.out.println("1");
		u1.add();
		
	}
}

五、测试结果


1
这是环绕通知之前
这是前置通知!!!
添加用户!!!
这是环绕通知之后
这是后置通知!!!
这是后置通知(出现异常也会调用)!!


猜你喜欢

转载自blog.csdn.net/qq_41485882/article/details/82824792