Spring是一个面向切面(AOP)和控制反转的(IOC)的框架
1.IOC控制翻转,为什么叫控制反转呢,因为决定权改变了。
以前是程序员作为主导,现在是利用set注入,把决定权交给了用户。
举个例子:
我们都知道Spring需要Dao层,Service层。
Dao层放实体,一般是Dao接口和DaoImpl实现类。
Service层放服务,一般是Service接口和ServiceImpl。
Service层调用dao层的接口。
现在具体要求来了,我们有三种水果。苹果,香蕉和桃子。
对应我们就要有fruitDao,AppleIMPL,bananaImpl,peachImpl。
如果不用IOC,我们就需要在Service层的接口写三个服务,也就是new三个Dao接口
fruitDao apple=new AppleImpl; fruitDao banana=new fruteImpl; fruteDao peach=new fruteImpl;//这是随便写的,不能运行哈。
现在是三个水果,以后是不是更麻烦?
麻烦是第一个,当用户需求更改的时候,用户说我不喜欢吃苹果,香蕉和桃子,我需要新的。你是不是还要后续添加,然后修改,根据用户的变化变化是非常错误的。
这时候就想想IOC。
1.我们之前是new一个确定的东西。
2.但是现在我们可以给一个接口fruteDao,fruteDao对应很多的实现类,AppleIMPL,bananaImpl,peachImpl。
3.我们在Service层之前是一个一个new的,现在我们使用一个set方法注入。
public void setFruteDao(FruteDao fruteDao) { this.fruteDao=fruteDao; }
不要小看这个代码。
之前写的三行都可以删了,写上这个。
只需要你在Test类或者用户访问的那个类里访问时调用set方法,把想要的那个水果传入就好了
fruteService.setFruteDao(水果类)
这样就会把你想要的那个水果传给service,然后弄个实体,不用new了,也就是把控制权交给用户了。
以前是用户要啥,我写啥,我是手动写
现在是用户自己说要啥,然后我站旁边看。相当于我造了个set注入机器,用户自己说,机器自动注入new。我就很轻松啊。