- IOC(Inversion Of Control,控制反转)
IOC它不是
技术,而是一种设计思想,是spring的核心。
控制:IOC意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制,spring容器控制了对象,主要是控制了外部资源的获取。类的创建、销毁都由 spring容器来控制
反转:在传统编程中,我们手动创建对象,而在IOC中是容器帮我们创建并注入对象,容器帮我们查找和注入对象,对象是被动注入的,叫反转
IoC对编程带来的最大改变不是从代码上,而是从思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击,但是在IoC/DI思想中,应用程序就变成被动的了,被动的等待IoC容器来创建并注入它所需要的对象。
- DI(Dependency Injection,依赖注入)
IoC和DI是同一个概念的不同角度描述,控制反转概念比较含糊,而依赖注入较明确;
依赖:应用程序依赖于spring容器
注入:spring容器为应用程序注入某个对象,spring容器通过反射来实现注入
- AOP(Aspect Oriented Programming,面向切面编程)
AOP是Spring提供的关键特性,Spring的AOP为动态AOP,
AOP就是在某一个类或方法执行前后打个标记,声明在执行到这里之前要先执行一段特定代码,执行完这里之后要接着执行另一段特定代码,所以AOP把一些公共特定代码块封装成切面(切面=代码块=横向关注点),切面与业务逻辑无关,要执行的这些特定代码是插拔式的。
为什么用AOP:方便你偷懒,把一些事情交给程序做;让代码逻辑更清晰,让业务逻辑关注业务本身而不是其他乱七八糟的东西(如安全,事物,日志)
连接点:你想在执行某个方法的前后执行一段特定代码,这个方法的前后就是连接点(spring只支持方法连接点)
切入点:假若你有很多方法的前后都需要执行特定代码,即你有很多个连接点,但现在你变卦了,只想在指定的一个方法前后执行特定代码,就可用切点指定这个方法,让切入点来筛选连接点,选中你想要的方法。