• Java 10.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.配置织入,将通知织入到目标对象

    加入AOP名称空间

    <?xml version="1.0" encoding="UTF-8"?>
    <beans 
    	xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xsi:schemaLocation="http://www.springframework.org/schema/beans 
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            https://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/aop 
            https://www.springframework.org/schema/aop/spring-aop.xsd"
            >
    		
    		
    		<!-- 目标对象 -->
           	<bean name="userServce" class= "com.Spring.aop.service.UserServceImpl"></bean>
    		<!-- 通知对象 -->
    		<bean name="transactionAdvice" class= "com.Spring.aop.advice.TransactionAdvice" ></bean>
    		<!-- 将通知对象织入到目标对象 -->
    		<aop:config>
    			<!-- 选择切入点 -->
    			<aop:pointcut expression="execution(. com.Spring.aop.service..*ServceImpl.*(..))" id="pointcut"/>
    			<aop:aspect ref="transactionAdvice">
    				<aop:before method="before" pointcut-ref="pointcut"/>
    				<aop:after-returning method="afterReturning"/>
    				<aop:after method="after" pointcut-ref="pointcut"/>
    				<aop:around method="around" pointcut-ref="pointcut"/>
    				<aop:after-throwing method="afterException" pointcut-ref="pointcut"/>
    			</aop:aspect>
    			
    		</aop:config>
           	
           	
    </beans>
    

      

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

      

  • 相关阅读:
    堆排序算法(C#实现)
    在 .NET 2.0 中享受 .NET 3.0的特性
    火花:使用文件管理功能管理我的连接
    我们可以做的更好
    有价值的文章
    网上掏宝
    WPF绑定技术一步步学
    结构类型需要重载GetHashCode和Equals
    关于扩展Visual Studio 2005的相关资料
    插件模型应该考虑的问题
  • 原文地址:https://www.cnblogs.com/yuzhenfu/p/12170664.html
Copyright © 2020-2023  润新知