Spring的传统aop编程

Spring的传统aop编程
讲解的目的是为了更好的理解aop。
在传统的spring aop开发中它支持增强(advice)有五种:

  1. 前置通知 目标方法执行前增强 org.springframework.aop.MethodBeforeAdvice
  2. 后置通知 目标方法执行后增强 org.springframework.aop.AfterReturningAdvice
  3. 环绕通知 目标方法执行前后进行增强 org.aopalliance.intercept.MethodInterceptor
  4. 异常抛出通知 目标方法抛出异常后的增强 org.springframework.aop.ThrowsAdvice
  5. 引介通知 在目标类中添加一些新的方法或属性(不讲解)
    org.springframework.aop.IntroductionInterceptor

经典的基于代理的AOP开发(了解)
基本的jar包
6. bean
7. core
8. context
9. expression
10. aop
11. 需要aop联盟的依赖jar包
在这里插入图片描述
第一步:编写目标(target)
接口:

package com.itcast.aop;

public interface OrderService {
    public void addOrder();
    public void updateOrder();
}

实现类:

package com.itcast.aop;

public class OrderServiceImpl implements OrderService {
    @Override
    public void addOrder() {
        System.out.println("没有代理的add。。。");
    }

    @Override
    public void updateOrder() {
        System.out.println("没有代理的update。。。");
    }
}

第二步增强(advice) :

package com.itcast.aop;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.springframework.aop.AfterReturningAdvice;
import org.springframework.aop.MethodBeforeAdvice;

import java.lang.reflect.Method;

public class OrderServiceAdvice implements MethodBeforeAdvice,AfterReturningAdvice,MethodInterceptor {
    @Override
    public void before(Method method, Object[] objects, Object o) throws Throwable {
        System.out.println("前置通知。。。");
    }

    @Override
    public void afterReturning(Object o, Method method, Object[] objects, Object o1) throws Throwable {
        System.out.println("后置通知");
    }

    @Override
    public Object invoke(MethodInvocation methodInvocation) throws Throwable {
        System.out.println("环绕前通知。。。");
        Object proceed = methodInvocation.proceed();
        System.out.println("环绕后通知。。。");
        return proceed;
    }
}

第三步在applicationContext.xml文件中配置
配置文件applicationContext.xml




    
    

    
    

    
    
        
            
                
                
            
        
    
    
    
        
    

    
    
        
        
    

    
    

    
    

测试:

package com.itcast.aop;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class AopTest {
    @Autowired
    //@Qualifier("orderServiceProxy")//自动代理之后就不需要指定代理对象了
    private OrderService orderService;
    @Test
    public void test1(){
        orderService.addOrder();
    }
}

ps:
spring的配置文件可以拆分,分模块分开配置
在这里插入图片描述
在applicationContext.xml中使用import标签引入


例示:
Spring的传统aop编程_第1张图片

你可能感兴趣的:(Demo,实现原理,AOP,Spring的传统aop编程)