首页 > 编程知识 正文

spring ioc的优点,简述Spring的IOC的三种方式

时间:2023-05-06 06:10:24 阅读:214394 作者:2605

学到Spring老师一定会讲一句话:IOC能够降低耦合性。可是为什么会降低耦合性,许多老师就讲不清了,下面我们通过举一些栗子来说明为什么IOC能够降低耦合性。

第一层-传统方式

通常我们写java程序都是通过实例化来获取对象,代码如下:

Dog dog = new Dog();dog.woof();

如果我们想要将Dog换成Cat,就需要在所有的程序中将Dog dog = new Dog()换成Cat cat = new Cat().除此之外,cat对象没有woof方法,而是具有bark方法,那么所有程序基本上等于白写了,你需要在所有程序中找到实例化dog对象的语句,然后将其替换成实例化cat对象,然后还要找到使用了dog对象的地方,删除woof方法的调用.也就1000多处声明,1000多处调用,今天和明天加加班就能搞完!!!加油!!!奥里给!!!

第二层-接口

有个小天才说,我们约定好一些公用的方法,大家都去实现它,不就可以任意切换了吗?对这就是接口.
代码如下:

Animal animal = new Dog()animal.bark();

好了现在我想把Dog换成Cat,只需要将所有的new Dog()换成new Cat()就行了,只需要在所有的程序中寻找Dog就好.也就如果你有1000个类,只需要今晚加加班就能搞定!!!加油!!!奥里给!!!

接口能够一定程度上降低代码的耦合度,接口就像一个插头面板,面板后面可以接火线也可以接零线.正是这个面板,让我们可以在符合标准的线之间任意切换.

第三层-工厂模式

又有一个小天才相出了一个绝妙的主意,我去构造一个既能生产Dog对象又能生产Cat对象的类不就更爽歪歪?
代码如下:

class AnimalFactory{AnimalFactory(){}public static Animal getInstance(String type){Animal result = null;if("dog".equals(type)){result = new Dog();}if("cat".equals(type)){result = new Cat();}return result;}} Animal animal = AnimalFactory.getInstance("dog");animal.bark();

这种方法把创建对象的过程交给了一个专业的类(Factory),我只需要告诉他我需要什么(参数),他就会返回给我正确的对象.但是他并没有解决我的声明语句七零八落的散落在程序中,现在我只能全文搜索一下,把所有的参数从dog换成cat.
但有了替换程序,我只需要裁定一下是否替换,两个小时应该可以搞定,今晚晚下班一会应该可以搞定!!!

第四层-反射

后来又有个大天才,他想到一个更绝妙的主意.我在写程序的时候不告诉工厂我需要什么,等到运行的时候我再告诉工厂我需要什么,你再给我生产出来不就可以了吗?

Animal animal = AnimalFactory.getInstance(我想要的你去config中读取);animal.bark(); 我想要的 = dog

好了,工厂要生产什么全部都写在了一个文件中,我只需要利用反射技术,在运行时再去读取要工厂生产的东西即可.这样如果我不希望生产dog了,只需要修改配置文件中dog->cat即可,只修改一处就行了.只需30秒,今晚不加班!!!
就这样我们通过四个层次降低了代码之间的耦合度了吗?

利用反射技术除了修改方便之外还带来一项好处:我们没有修改任何一处代码,只是改了配置文件,也就是说我们的代码不需要重新编译.

总结

第四层就是IOC在做的事情
IOC = 工厂模式+反射+配置文件读取
所有的JavaBean都被IOC的工厂管理,你需要的时候就和工厂说一声我需要XXX就可以了,这样工厂就会返回给你一个正确的对象.在不需要的时候修改工厂的生产列表(配置文件),工厂就停止生产该JavaBean了.
所以说让专业的人干专业的事是社会的进步,社会分工带给我们更多的社会财富!!!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。