二.Spring的IOC思想
1.IOC:
之前的开发过程
UserDao 接口
UserDaoIml 实现
UserService 接口
UserServiceiml 实现
随着需求的不断增加,我们就需要不断的去修改源代码,为了弥补这个缺点,我们可以使用一个set方法,进行动态的创建需求对象
2.演示:
一个Dao接口,2个Dao的实现类(对应不同的需求)
package com.why.dao;
/**
* @program: Spring
* @description:
* @author: @why
* @create: 2020-08-30 15:24
**/
public interface UserDao {
//不同的功能会发出不同的声音
public void Function();
}
package com.why.dao;
/**
* @program: Spring
* @description:
* @author: @why
* @create: 2020-08-30 15:26
**/
public class UserDaoByMysql implements UserDao {
@Override
public void Function() {
System.out.println("发出了Mysql的叫声");
}
}
package com.why.dao;
/**
* @program: Spring
* @description:
* @author: @why
* @create: 2020-08-30 15:26
**/
public class UserDaoByOrcle implements UserDao{
@Override
public void Function() {
System.out.println("发出了Orcle的叫声");
}
}
一个service接口,一个service实现类
package com.why.service;
/**
* @program: Spring
* @description:
* @author: @why
* @create: 2020-08-30 15:28
**/
public interface Service {
//用户需求
public void UserUse();
}
package com.why.service;
import com.why.dao.UserDao;
import com.why.dao.UserDaoByMysql;
import com.why.dao.UserDaoByOrcle;
/**
* @program: Spring
* @description:
* @author: @why
* @create: 2020-08-30 15:28
**/
public class ServiceIml implements Service {
private UserDao dao;
//根据用户的需求来set属性
public void setDao(UserDao dao) {
this.dao = dao;
}
@Override
public void UserUse() {
dao.Function();
}
public static void main(String[] args) {
ServiceIml serviceIml=new ServiceIml();
//根据用户需求所发出的不同叫声
serviceIml.setDao(new UserDaoByMysql());
serviceIml.UserUse();
serviceIml.setDao(new UserDaoByOrcle());
serviceIml.UserUse();
}
}
3.图片演示:
之前程序员的工作,扮演的角色:
现在程序员的作用,扮演的角色:
总结:
对于spring,它就是一个大型的对象容器,将我们所有写好的类放到这个容器中去,接着根据我们自己的需求,再到这个容器中去取。
解耦也都是因为这个容器 (图片来自互联网)