• 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();
    	}
    	
    }
    

      

  • 相关阅读:
    physicsbased animation阅读计划
    读代码的一点感想
    Paired Joint Coordinates
    坐标变换
    ADO.NET用法示例
    希腊字母读法
    数据库系统概论(第三版)学习笔记
    在网页里让文本框只能输入数字的一种方法。外加回车换Tab (javascript key键的使用)+禁止切换输入法转
    常用的一些javascript小技巧
    在.NET2.0中上传文件操作(解决了上传文件大小和多文件限制)转
  • 原文地址:https://www.cnblogs.com/yuzhenfu/p/12188138.html
Copyright © 2020-2023  润新知