一:概念的介绍:
什么叫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方法进行注入;