什么是控制反转,它的好处是什么?
在最开始写程序,DAO是我们自己new出来的,这时候的编程完全控制在自己手里用了spring之后,初始化过程控制在容器手里了,我们自己不再去new它了,反转到容器那里去了。原来我们的程序我们控制的是具体的实现,写程序直接写实现,现在我们控制的是它的接口它的抽象,原来我们依赖的是它的实现,现在我们依赖的是它的抽象。从具体的实现反转到抽象的概念上,我们针对的是接口编程。public void
·
在最开始写程序,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方式的缺憾所在。
更多推荐
已为社区贡献1条内容
所有评论(0)