Spring简述二

其他Spring相关文章:
Spring和jdbctemplate、mybatis整合
Spring简述一

AOP面向切面(底层是动态代理实现的)

作用:
不通过修改原代码来实现拓展功能。
AOP采用了横向抽取机制,代替传统纵向继承体系,来减少代码量
适用场景:
事务管理,缓存,性能监控,安全检查
纵向继承机制:
第一种实现方式:在有接口的情况下,使用JDK自带的动态代理实现——InvocationHander的实现类,实现invoc方法;
第二种实现方式:在没有接口的情况下,使用CGlib的动态代理实现——通过扩展一个子类,拦截父类方法,实现动态代理;

AOP术语介绍:

连接点(joinpoint):指的是被拦截的点,在spring中指的是方法,类中的方法可以被增强(新增加功能)
切入点(pointcut):指的是对链接点进行拦截的定义(类中的很多方法可以被增强,实际被增强的方法被增强的叫做切入点)
增强/通知(Advice):增强值得是拦截到PointCut点之后要做的事情称之为增强(新增功能称为增强)
前置通知:执行方法之前进行的添加
后置通知:执行方法之后进行的添加
环绕通知:前置通知和后置通知加在一起,即在方法执行的前后都进行通知
最终通知:在后置通知之后执行
异常通知:在异常的情况下执行
切面(Aspect):切入点和通知的结合(将增强应用到切入点的过程)

Spring中AOP的使用

在Spring中是通过Aspectj实现AOP功能的Aspectj不属于Spring,是一个单独的面向切面的框架,Spring是需要结合Aspectj整合完成Aop的功能。用Aspectj实现AOP有两种方式——配置方式和注解方式

配置方式使用步骤

1、引入AOP依赖



  org.springframework
  spring-aop
  4.1.7.RELEASE


  org.aspectj
  aspectjweaver
  1.6.0


  aopalliance
  aopalliance
  1.0

2、创建配置文件,引入AOP约束条件 通过execution函数,可以定义切点的方法切入
1、切入点:实际增强的方法
2、常用的表达式:
execution(<访问修饰符>?<返回类型><方法名>(<参数>)<异常>)
(1)execution(* com.bean.Book.show(…)) 表类里面的某一个方法
(2)execution(* com.bean.Book.(…)) 表类某个包里类所有方法
(3)execution(
.(…)) 表示所有





 



    
    

    
    
        
        
        
    


3、创建代增强类

public class Person {
    public void add() {
        //添加日志功能
        System.out.println("Person.add...");
    }
}

4、增强类实现

/前置通知
    public void before(){
        System.out.println("前置通知");
    }

    //环绕通知
    public void around(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("环绕通知前");
        //指定真正执行的时机
        joinPoint.proceed();
        System.out.println("环绕通知后");
    }
   

注解方式使用步骤
1、打开AOP的注解开关<aop>



2、在增强类上添加相关的注解

@Aspect
public class Log {
    //前置通知
    @Before(value = "execution(* com.bean7.Person.add(..))")
    public void before(){
        System.out.println("前置通知");
    }
}

Spring其他内容未完待续。。。

你可能感兴趣的:(JAVA,Spring,Java,框架,简述,小白)