IOC和AOP是Spring中两个非常核心的概念。
一、IOC
IOC是控制反转,也可以称为依赖倒置。
所谓的依赖,就是在程序中,A要调用B的方法,那么A依赖于B。理解倒置之前,首先理解不倒置,不倒置就是A要依赖B,那么必须要有B,不倒置就是A要主动获取B的实例 B b=new B(),然后就可以使用了。倒置就是你不需要主动获取B,而是由其他人把B主动送上门来。举个例子,如果你想喝水,那么必须去小卖部去买,但是呢,小卖部离家很远,去买的话需要骑车等等,去了之后还不知道小卖部有没有你想要的那种水,这个问题也就复杂了。但是,小卖部有送货上门的服务,你只需要给小卖部说一声你要的是哪种水,那么会由配送人员直接给你送货上门,这样问题就非常简单了。
spring中的IOC的原理就是:动态代理。
二、AOP
AOP是面向切面的编程,它的目标就是分离关注点,什么是关注点呢?关注点就是你要做的事情。举个例子,假如一个公子哥,每天的事情除了吃就是玩,其他的事情不想管,但是它每天睡觉前得脱衣服,起床后得穿衣服,吃饭等等,这就是它的关注点,那怎么办呢?这就需要别人来帮他完成它的事情,那么他就会雇佣一些仆人,仆人A给他穿衣服,仆人B给他把饭端上来等等,然后它吃了饭就出去玩,回来了,仆人再次完成他们的任务。
AOP的好处就是你只需完成你想做的事情,其他的事情由别人帮你完成,每个人各司其职,灵活组合,达到一种可配置的、可插拔的程序结构。AOP的最大用途就是提供了事务管理的功能,它的关注点就是事务管理,只需要访问数据库,不想管事务,所以,spring在访问数据库之前,自动开启事务,当你访问数据库结束的时候,自动结束事务和回滚事务。