Spring-面向切面(Aop)

1.环境搭建

引入AOP相关依赖


    org.springframework
    spring-aspects
    5.1.6.RELEASE

2.创建spring-context.xml引入AOP命名空间



流程:

定义原始类

public interface EmpServices {
    void  show();

    int add(User user);
}
public class EmpServicesImpl implements EmpServices {

    @Override
    public void show() {
        System.out.println("获取数据展示show方法");
    }

    @Override
    public int add(User u) {
        System.out.println("新增user");
        return 0;
    }
}

定义通知类(添加额外功能)

/**
 * @author: qiuyongqi
 * @time: 16:34 2021/5/17
 * @description:  前置增强
 */
public class BeforeShow implements MethodBeforeAdvice {   //实现前置通知接口
    @Override
    public void before(Method method, Object[] args, Object target) throws Throwable {
        System.out.println("我来记录日志了");
        System.out.println(new Date()+":执行了-->"+method.getName()+"方法");
    }
}

定义bean标签

    
    
    
   
    
    
    

定义切入点(PointCut)

形成切面(Aspect)

   
        
        
          
        
        
        
        
    

测试类:

public class TestAop {

    @Test
    public void t1() {
        ApplicationContext ac = new ClassPathXmlApplicationContext("application-aop.xml");

        EmpServices es = (EmpServices) ac.getBean("empServices");
        System.out.println("*************");
        System.out.println(es.getClass());
        System.out.println("*************");
        es.show();
        System.out.println("=====================");
        System.out.println("=====================");
        System.out.println("=====================");
        es.add(null);

    }

}

Spring-面向切面(Aop)_第1张图片

总结Aop:

  • 通过AOP提供的编码流程,更便利的定制切面,更方便的定制了动态代理。

  • 进而彻底解决了辅助功能冗余的问题;

  • 业务类中职责单一性得到更好保障;

  • 辅助功能也有很好的复用性。

 

你可能感兴趣的:(Spring,JAVAEE,spring,aop,java)