Spring Aop

AOP(Aspect-OrientedProgramming,面向切面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能。日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。对于其他类型的代码,如安全性、异常处理和透明的持续性也是如此。这种散布在各处的无关的代码被称为横切(cross-cutting)代码,在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用.
而AOP则能够将这种散布在各处的无关代码抽象出来,减少代码重复。
AOP使用场景:
Authentication 权限

Caching 缓存

Context passing 内容传递

Error handling 错误处理

Lazy loading 懒加载

Debugging  调试

logging, tracing, profiling and monitoring 记录跟踪 优化 校准

Performance optimization 性能优化

Persistence  持久化

Resource pooling 资源池

Synchronization 同步

Transactions 事务

主要介绍两种AOP实现方式:纯POJO方式和注解配置方式

纯POJO方式


    
        
            
            
            
        
        
            
            
        
    
package com.biz;

/**
 * Created by Tired on 2018/4/3.
 */
public class StudentServiceImpl implements ISerivce {
    public void save() {
        System.out.println("正在执行新增操作。。。。。。");
    }

    public void display() {
        System.out.println("正在展示学生信息");
    }
}
 public static void aop() {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        StudentServiceImpl bll = (StudentServiceImpl) context.getBean("stuService");
       bll.display();
        bll.save();
    }

注解方式

package com.aop;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

/**
 * Created by Tired on 2018/4/3.
 */
@Aspect
@Component
public class HelloWorldAspect {
    @Pointcut(value = "execution(* com.biz.StudentServiceImpl.save())")
    public void pointCut (){

    }

    @Before(value = "pointCut ()")
    private void beforeAdvice (){
        System.out.println("===========before advice param:");
    }

    @After( value = "pointCut ()")
    private void afterAdvice (){
        System.out.println("===========after advice param:");
    }

    @Around(value = "pointCut ()")
    private void aroundAdvice (ProceedingJoinPoint pjp) throws Throwable{
        System.out.println("===========before advice param: around");
        pjp.proceed();
        System.out.println("===========after advice param: around");
    }
}

你可能感兴趣的:(Spring Aop)