很多初学spring的人其实对于spring这个东西的一些基本概念不怎么熟悉,什么控制反转啊,依赖注入、面向切面等等。小白今天来谈谈这些个东西吧。
1 控制反转(IOC: inversion of control )
首先来一段官方的介绍:Spring通过一种称作控制反转(IoC)的技术促进了低耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对 象自己创建或者查找依赖对象。你可以认为IOC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。
对于这个概念的官方解释,我真的很费解。后来慢慢才理解了这个概念的含义。首先需要来说说控制,在我们创建一个对象(new Object)的同时便是拥有了这个对象的控制权。有反转的话就先来说说正向的控制吧。
* 正向控制:当A类需要C类的资源时,便会在A类中new一个C类对象c,所以A就有了c的控制权,这就是正向的控制。也就是A类主动地去创建C。
* 反向:便不是A主动地去创建,而是被动地获取C类的对象,这便是反向。控制反转其实就是将控制权转移给了spring,让IOC/DI的容器来控制对象的创建
需要注意的是在spring的配置文件之中name应和pojo类中的命名相同)
2 依赖注入(与控制反转对应的方法)
既然不是本类创建所需要的对象,那么便需要一个方法来让我们获取到所需要的对象,这个方法在spring中便被称作依赖注入,在这里我们需要了解的是什么是依赖,什么是注入。我们这里用A表示本类,C表示A类所需的资源类
2.1 依赖
这里的依赖指的便是A类依赖于spring(IO而注入则是指spring将创建好的C类注入到A类中的过程,过spring才能够获取到所需要的C类资源。
2.2注入
而注入则是指spring将创建好的C类注入到A类中的过程
3 面向切面编程(AOP)
3.1定义
可以说成是OOP(面向对象编程)的补充和完善,OOP便不用多说了,虽然带给了我们很多的便利,但是其导致了大量代码的重复,而且不利于各个模块的重用,但是AOP这种技术刚好弥补了面向对象这个缺点。
AOP技术利用“横切”的技术,以此来解开封装的对象内部然后将可以重用的方法或1业务(与核心业务无关)
3.2功能
让关注点代码和业务代码分离
关注点代码:重复且在项目中要多次用到的功能性代码,
业务代码:即项目核心业务代码
3.3优点
关注点集中到一处之后,使得代码更加整洁,并且可以使程序员更加注重于业务代码。
3.4连接点
在操作发生时应用切面
3.5切面
即一个切面类,一个需要用到切面编程方法的类
3.6切点
一般用某个包中的类的明确的方法来指定在何处应用切面,应用切面的这个点便称为切点,一般用切点来指定连接点。一般用某个包中的类的明确的方法来指定在何处应用切面,应用切面的这个点便称为切点,一般用切点来指定连接点。
3.7 AOP通知
3.7.1 advice:before(方法执行前)
3.7.2 after(连接点退出后不管是否执行完)、
3.7.3 after-returning(连接点正常执行完后)、
3.7.4 after-throwing(方法抛出异常退出执行时)
3.7.5around(调用方法前后执行)