Spring-AOP的原理-动态代理-IOC-注解配置

一:概念的介绍:

    什么叫AOP?


          关键:  横向重复,纵向提取;

        AOP能为容器中管理的对象动态生成代理对象,AOP是指编程不是针对某一个对象,而是针对一群对象,打个比方:就像一个一个个圆柱形,这一个个圆柱形就是一个个对象,OOP思想就是往这个圆柱里面填充方法,属性等等,但是AOP的思想就是,把这个圆柱切开,把一些通用的东西加进去,常见的如 日志,事件等等。AOP是一种思想,并一定要用动态代理的方式来实现,想过滤器,拦截器等都是AOP的思想;

    连接点:目标对象中,所有可以被增强的方法叫做连接点;

    切入点:已经被增强的方法叫做切点:

    通知/增强:增强的内容(代码),有前置通知,环绕通知,后置通知,异常通知等,常见的如:事务,日志等;

    目标对象:被代理对象;

    织入:就是把通知和连接点连接,形成切点的过程;

    代理:将通知织入目标对象之后形成代理对象;

    切面:切入点加通知就叫切面;

二:AOP的实现原理:

    AOP有两种实现方式:动态代理和CGlib代理;

    动态代理:动态代理需要的条件就是需要目标对象实现的接口,如果没有接口的话就不能使用动态代理模式;则只能使用    GClib代理模式;也是Spring默认代理方式;

     GClib代理模式:是通过继承的方式,形成目标对象的子类,对子类进行增强,从而形成代理,所有当父类被final修饰的时候,那么这个时候就不能使用GClib代理了;

三:IOC(Inverse Of Control)反转控制

    简而言之,就是将创建对象的权利反转了,我们以前的对象都是自己创建的,包括依赖关系也是自己注入的,但是有了Spring之后,对象的创建以及依赖的注入都可以由Spring来完成了。

    但是Spring创建对象的时候,那些对象所依赖的信息怎么来呢?比如:我要创建一个Tom这个人,这个人的姓名是Tom,年龄是18,那么我就要告诉Spring这些信息,这就引入了另一个概念:依赖注入(DI  Dependency Injection)

    依赖注入的方式:

                构造器;

                set方法;

                字段注入;

    注入的类型:值类型和引用类型;

四:注解配置

    Resource和autowired的区别:

    Resource是javax.annotation.Resource 下面的类,并不是Spring里面的注解;他的默认是使用ByName自动注入的;

    autowried则是Spring自带的注解;默认使用的是ByType类型注入的,默认情况下要求依赖的对象必须是存在的,如果允许为null,可以设置他的required为false;

    两者都可以对字段和set方法进行注入;

猜你喜欢

转载自blog.csdn.net/qq_34144916/article/details/80848147