第一步:导jar包
相关jar包链接:链接: https://pan.baidu.com/s/1lo8eehhJNds-8HULbJ3LuQ 提取码: fdhn
第二步:实现类与切面类
2.1、首先写一个IUserService接口:
public interface IUserService {
void addUser();
void updateUser();
void deleteUser();
String telByUserId();
}
2.2、写一个IuserService接口的实现类IUserServiceImpl
public class IUserServiceImpl implements IUserService {
@Override
public void addUser() {
System.out.println("添加用户");
}
@Override
public void updateUser() {
System.out.println("更新用户");
}
@Override
public void deleteUser() {
System.out.println("删除用户");
}
@Override
public String telByUserId() {
String s = "120";
return s;
}
}
2.3、写一个切面类MyAspect
public class MyAspect {
/**
* 前置通知
* @param joinPoint
*/
public void myBefore(JoinPoint joinPoint){
System.out.println(joinPoint.getSignature().getName());
System.out.println("前置通知");
}
/**
* 后置通知
* @param joinPoint
* @param ret
*/
public void myAfterReturnning(JoinPoint joinPoint,Object ret){
//第二个参数为返回值
System.out.println(joinPoint.getSignature().getName());
System.out.println("后置通知"+ret);
}
/**
* 环绕通知
* @param joinPoint
* @return
* @throws Throwable
*/
public Object myAround(ProceedingJoinPoint joinPoint)throws Throwable{
System.out.println("环绕通知-前");
Object obj = joinPoint.proceed();
System.out.println("环绕通知-后");
return obj;
}
/**
* 异常通知
* @param joinPoint
* @param e
*/
public void myAfterThrowing(JoinPoint joinPoint,Throwable e){
System.out.println("异常通知:"+e.getMessage());
}
/**
* 最终通知
*/
public void myAfter(){
System.out.println("最终通知");
}
}
第三步:配置beans.xml文件
注意:beans.xml文件放置在src目录下面,需要自己创建。
<?xml version="1.0" encoding="UTF-8"?>
<!--xmlns xml namespace:xml命名空间-->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:p ="http://www.springframework.org/schema/p"
xmlns:context ="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!--业务类-->
<bean id="userService" class="com.xianzhou.service.Impl.IUserServiceImpl"/>
<!--切面类-->
<bean id="myAspect" class="com.xianzhou.aspect.MyAspect"/>
<aop:config>
<aop:aspect ref="myAspect">
<aop:pointcut id="myPointCut" expression="execution(* com.xianzhou.service.*.*(..))"/>
<!--前置通知-->
<!--<aop:before method="myBefore" pointcut-ref="myPointCut"/>-->
<!--后置通知-->
<!--<aop:after-returning method="myAfterReturnning" pointcut-ref="myPointCut" returning="ret"/>-->
<!--环绕通知-->
<!--<aop:around method="myAround" pointcut-ref="myPointCut"/>-->
<!--异常通知-->
<!--<aop:after-throwing method="myAfterThrowing" pointcut-ref="myPointCut" throwing="e"/>-->
<!--最终通知-->
<aop:after method="myAfter" pointcut-ref="myPointCut"/>
</aop:aspect>
</aop:config>
</beans>
第四步:测试
写一个测试类AopTest
可使用单元测试的方法或者直接在main里面测试,单元测试需要导入JUnit4的jar包
JUnit4包的链接:链接: https://pan.baidu.com/s/1ArOw391g8k8GwHvFnjWCPQ 提取码: a6uh
public class AopTest {
@Test
public void test1(){
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
IUserService userService = (IUserService) context.getBean("userService");
userService.addUser();
}
}
第五步:输出结果