在最开始写程序,DAO是我们自己new出来的,这时候的编程完全控制在自己手里
用了spring之后,初始化过程控制在容器手里了,我们自己不再去new它了,反转到容器那里去了。

原来我们的程序我们控制的是具体的实现,写程序直接写实现,现在我们控制的是它的接口它的抽象,原来我们依赖的是它的实现,现在我们依赖的是它的抽象。从具体的实现反转到抽象的概念上,我们针对的是接口编程。
public void add(User user){
  this.userDAO.save(user);
  System.out.println(user.getPassword());
  System.out.println(user.getUser());
  
 }
UserDAO.save(),UserDAO就是一个接口,我们面对的是接口编程,但是真正注入进来的是具体的实现。

IoC的优点和缺点

  IoC最大的好处是什么?因为把对象生成放在了XML里定义,所以当我们需要换一个实现子类将会变成很简单(一般这样的对象都是实现于某种接口的),只要修改XML就可以了,这样我们甚至可以实现对象的热插拨(有点象USB接口和SCSI硬盘了)。
  IoC最大的缺点是什么?(1)生成一个对象的步骤变复杂了(事实上操作上还是挺简单的),对于不习惯这种方式的人,会觉得有些别扭和不直观。(2)对象生成因为是使用反射编程,在效率上有些损耗。但相对于IoC提高的维护性和灵活性来说,这点损耗是微不足道的,除非某对象的生成对效率要求特别高。(3)缺少IDE重构操作的支持,如果在Eclipse要对类改名,那么你还需要去XML文件里手工去改了,这似乎是所有XML方式的缺憾所在。
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐