优点
- 控制反转IOC
- 面向切面编程AOP
- 轻量级, 非入侵
IOC理论推导
- UserDao接口
- UserDaoImpl实现类
- UserService业务接口
- UserServiceImpl业务实现类
原来的业务中,用户的需求可能会影响原来的代码, 我们需要根据用户的需求去修改代码. 如果程序代码量十分大,修改一次的成本非常大
早期开发
- 接口
- 实现类
- 业务层service调用dao层(在service中放入到的对象, 组合的思想)
- 增加实现类, 则需要修改service层的代码
//需要直接在service实现类中new dao层的对象
private UserDao userDao = new UserDaoImpl();
private UserDao userDao = new UserDaoMysqlImpl();
IOC控制反转
- 使用set方法, 使用哪类dao层对象, 则传入那个对象
- 直接在MyTest中修改代码, 而不需要修改资源代码
- 在service中修改代码和在MyTest中修改代码的区别
beans.xml配置文件
id:对象名
class:类全路径名
ref:引用spring容器中创建好的对象
value:具体的值,基本数据类型
IOC创建对象
- 默认使用无参构造创建对象
- 或者通过参数名来创建对象(需要有参构造, 但有参构造最终还是会调用无参构造)