思想引入
假设一个系统原先只设定有一个默认的方法去完成业务,这里举例这个原先设定开发的是 UserDaoImpl(可能有些牵强,但是不影响我们对逻辑的理解)这样一个业务。
后来有一天,需求变了,业务流程大改,这里举例改为 UerDaoOracleImpl,这时候我们可能需要修改 UserService中对Dao层的引用,即修改原理的UserDaoImpl为UerDaoOracleImpl。
再后来,用户需求又变了,比如来了个 UserDaoMysqlImpl,这时候可能有得修改代码了吧。
好吧,那改吧,但是呢又有一天产品经理跑过来说改回原来的第一种,emmmm
示意图如下:
既然这样,和不把这个修改权丢给用户呢?要是能把这个修改权交给用户*适用,那我们是不是可以把节省下来的时间拿去学新的技术了呢?是不是让用户感觉更好了呢?
就这样IOC思想来了!
IOC思想
IoC,Inversion of Control,控制反转,是一种设计思想。
即把对象的创建,从原来的由原来的程序自己控制,变成了向外转给第三方/用户/容器来根据需要自定义管理创建。
举个和代码不是很相关的例子,例如以前的网站几乎都是只有一种风格,网站管理者设计的是什么样用户看到的就是什么样,但是现在不一样了,不少网站支持用户根据自己的喜好随意切换风格、皮肤,这也是控制反转思想的一种应用吧。
IOC简单应用
好,现在就简单的应用 IoC 这种思想来改变上图这的逻辑吧。
假设我们这里的 UserController就是对外(用户)的接口,即别的人/系统回从这里开始调用我们的业务逻辑。
现在我们就在这里直接接入用户需求,例如接口使用方说用 UserDaoMysqlImpl,好,那你就自己new一个UserDaoMysqlImpl对象传入我的预留的接口就行呗。
再过两天接口调用者又想用 UerDaoOracleImpl 这套了,也行,你自己set进去一个UerDaoOracleImpl就能调用我对UerDaoOracleImpl这套业务的支持了。
就这样,IoC 思想用上了,使用的人能按照自己的意思来了,我们也节省力气了。
示意图如下:
好了,到这里对IOC思想我们已经有了解了,那么Spring这个家伙又是怎么把IOC这种思想完美的应用了呢?
下一篇探讨: