zoukankan      html  css  js  c++  java
  • 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# WCF的POST请求包含Stream及多个参数
    C# Fakes
    C# 计算文件的MD5
    C# 获取计算机的硬件、操作系统信息
    整数拆分
    整数拆分问题的四种解法【转载】
    python爬虫
    【转载】Scrapy安装及demo测试笔记
    Python野生库
    【转载】python3安装scrapy之windows32位爬坑
  • 原文地址:https://www.cnblogs.com/yuzhenfu/p/12170664.html
Copyright © 2011-2022 走看看