学习

Java中的耦合和Spring

高内聚

高内聚:一个方法只做一件事情
在Java编程中,应该让自己所编写的代码符合高内聚思想,在对某一个功能维护扩展的时候,不会影响其他代码的变更,方便维护和扩展
示例代码:
Java中的耦合和Spring

耦合

耦合:Java类之间的依赖关系
耦合的弊端:被依赖(耦合)的类不能变更,一旦被依赖的类发生了变更,所有依赖的位置都需要随之而改变(牵一发而动全身)
低耦合:在Java编程中,应该让自己的代码尽量降低耦合关系
目标:被依赖的对象发生变更时,依赖的位置不需要做任何的改动
Java中的耦合和Spring

解耦

目标:被依赖的对象发生变更时,依赖的位置不需要做任何的改动
解耦合:在Java中,耦合关系不可能完全解开,完全解开也就意味着Java的类与类之间无法调用了,我们所谓的解耦合,本质上是降低耦合关系,当被依赖的类发生变更时,依赖的位置的Java代码无需做任何改动
实现方式:
1.面向接口编程,给被依赖的类对象提供接口
2.提供配置文件,将被依赖的类的全限定名添加到配置文件中
3.提供工厂类,由工厂类解析配置文件,反射创建被依赖的类对象
4.在依赖的位置,调用工厂中的getBean方法,获取对应的对象即可(父接口,接收子实现类对象)
Java中的耦合和Spring
自己写太麻烦了,Spring的IOC已经帮我们解决了这个问题

Spring

Spring是一个完整的生态,Spring家族所有的框架都依赖Spring
两大核心:

  1. IOC: 控制反转
  2. AOP: 面向切面编程
    IOC(inversion of control): 控制反转,控制的是对象,反转的是对象的控制权,用于削减程序之间的耦合关系,底层使用工厂模式和反射技术实现的

Spring用于创建Bean对象的注解:
@Component:
@Controller("id"):
@Service("id"):
@Repository("id"):
作用:这些注解使用在类上,用于创建被修饰的类对象,并将创建好的对象存放到IOC容器中
@Controller,@Service,@Repository:
三个注解的作用和属性与@Component的作用和属性是一模一样的,他们只是提供了更加明确的语义化(见名知意),精确指出是哪一层的对象,但不是强制要求的
@Bean() : 将方法返回的对象存放到IOC容器中
● 将此方法的返回值存放到IOC容器中
● 默认的ID值为当前方法的方法名称
AOP(Aspect Oriented Programming):面向切面编程,一种编程范式
作用:在程序运行期间,在不修改源码的基础上对方法进行增强
优点:减少重复代码,提高开发效率,维护方便
方法增强的三种方式:
● 继承
● 装饰者模式
● 动态代理
AOP的实现方式:底层就是动态代理(在程序运行期间,生成代理对象,让代理对象去完成目标对象要完成的功能),AOP底层依赖Proxy和Cglib,默认使用Proxy,当被代理类没有接口时Spring会选择Cglib

Spring整合其他框架思想

基于Spring的IOC容器,在Java的体系中,无论任何第三方框架,Spring都可以整合,所谓的Spring整合其他框架,本质上就是创建其他框架使用的对象,将对象存放到自己的IOC容器中,然后将对象注入指定的对象内,调用对象中的方法,实现对应的功能。

GL
GL 一个酷爱健身,热爱编程de爱国的小青年

发表评论