Java发展的路途中,由刚开始的使用new创建对象,到使用抽象类,接口进行解耦,又到了提问时刻,什么是耦合度?
对于这个对象的关联和依赖关系,例如:
当一个对象要使用,但是,它并不能直接拿来用,有一个或者多个前提,必须给定别的 方法,或者对象。
JAVA刚开始就是使用接口来解决小部分耦合度,又名多态。
当spring出来的时候,是对JAVA的跨越式的进步,使用了IOC控制反转:
他的主要思想是:
将对象交给一个IOC容器来做,程序员只负责调用,这就是为什么要说是控制反转,我们不再创建对象,只负责调用,以前是程序员new,现在反过来了。
既然ioc负责创建对象,那么有参数、成员的时候应该如何赋值呢?
spring定义了DI注入,什么叫注入?这里就要谈到JAVA类的创建过程:
类在创建时,会走一步叫做类加载器,加载的过程中就会创建一个Class类,里面就包含了这个类的所有元素。一个对的创建有四种方式:new、反序列化、反射、克隆
这里ioc底层的Di注入就是使用了反射机制,获得到元素后,进行赋值。
AOP面向切面编程:
聊到这个,我们任然要知道接口,AOP的底层用到了代理模式 。而代理模式和接口的思想很接近,代理模式是:
小明要去租房子,但是找不到房源(房东),
所以只能被宰一刀,去找中介,
中介负责带着小明去看房,签合同,还有给差价!
以上故事就是代理模式
大家仔细想,中介的:看房、签合同是不是房东也可以做,但是房东不会赚差价。
所以代理模式就是:通过代理(接口实现)这个类,拥有父类的方法,但是自己还加了一些自己的方法。任然使用的是接口的思想。最重要的是中介没用动房东的利益(也就是编程中的源码)。
聊回来,我们继续来看AOP:
现在是不是很清楚,AOP就是在不动业务源码的情况下,加一些奇奇怪怪的业务。
如果用这张图,把编写业务看做纵向线段,那么AOP就是在这条线上加一些东西: