IOC
What:IOC 是控制反转或依赖注入,在我们传统的面向对象编程思想里,一个类的控制权
是由我们自己控制,使用 Spring 之后,我们将类的控制权交给 Spring 容器管理,所以说
new 这个类的过程的控制权交给了 Spring,所以这就是控制反转。IOC 还有一个解释就是依
赖注入,比如在 A 类里面调用 B 类的方法,传统的做法是在 A 类里面实例化 B,然后调用 B
里面的方法,所以说 A 类依赖于 B 类,当我们引入 Spring IOC 之后,我们就将 B 类的控制权
交给 Spring 管理,当 A 类需要用到 B 类的时候,Spring 自动将 B 类注入进来,这就是所谓
的依赖注入
How:只需要在 Spring 的配置文件 applicaoncontext.xml 完成相关配置就行,写一个 bean
标签,然后里面有 Id ,class 两个属性,然后 bean 里面有哪些属性就在 bean 里 面 加
property 这种方式,将属性写出来。为什么在配置之后就会 Spring 就会帮我们实例化这个
类,因为 Spring 解析了 XML 配置文件 (常用 dom4j,其它 dom,Jdom,sax)),至于具
体怎么解析不用说,问到就说要用的时候百度一下,将代码改一下就可以。
解析完成之后,通过反射的原理,实例化这个类,调用构造方法或者 set 方法,给这个类
的属性注入值
AOP
What:AOP 是面向切面编程,什么是面向切面编程,比如有个同学 A 去跑 100 米,他的核
心业务是跑 100 米,同时还想计算跑 100 米的时间,不能说他边跑步边去记录时间,如果
这样做,那么跑步的代码和记录时间的代码就会混杂在一起,他就不能专心去做他的核心
业务,所以我们请另外一个同学专门为他计时,A 同学专心去跑步,计时这个事交给 B 来
完成,
B 同学就是 A 同学的代理类,代理又分静态代理和动态代理,代理的实现方式,一般情况
下如果我们手动的去实现,代理有两种方式。一种是类继承的方式,一种是接口的方式。
一般情况下不需要我们人为去写代理类,借助 JDK 帮我们去生成代理类,生成动态代理,
借助于 JDK 的 Proxy 这个类下 newProxyInstance 方法去生成代理,还可以借助 CGlib 的包去
生成代理类。在 Spring 的面向切面编程中分别引用了 JDK 和 CGlib 包去生成动态代理。
How:在项目中经常用到事务,事务这块用的是 AOP,在项目中的事务将交给 Spring 去管
理。Spring 管理事务主要是用 HibernateTransaconManger 这个类,这个类是一个切面类,
当我们业务层去执行增删改查方法时,比如 saveUser()方法,这个方法向两个表插入数
据,向一个 User 表插入数据,再向日志表里插入数据,要执行两条 sql 语句,这两条 SQL
语句要么一起成功,要么一起失败,所以不能说我们自己在 saveUser 方法里面自己开启事
务 , 然 后 成 功 之 后 提 交 事 务 , 所 以 我 们 将 事 务 交 给 Spring 去 管 理 , 那 么
HibernateTransaconManger 是事务的切面类,有了这个切面类之后,Spring 就在在我们执
行 saveUser 方法时将这个切面类切入到方法体,在我们执行 saveUser 方法之前开启事务,
执行 saveUser 方法之后提交事务,执行失败之后回滚事务,在 saveUser 方法里不需要人为
的去 写 beginTransacon 和 commitTransacon 或 者 rollbackTransacon ,管 理 事务 就 交给
TransaconManger,交给 Spring 去做。
具体的配置,就是在相应的配置文件里配置一下就可以,具体的代码就是复制过来改一下
就可以了
解析了 XML 配置文件 (常用 dom4j,其它 dom,Jdom,sax),
评论0