网站加速服务,如何自己做企业网站,优秀网站制作实例展示,做照片用的视频模板下载网站目录 三层架构
Controller
Service
Dao
编辑
调用过程
面向接口编程
分层解耦
耦合
内聚
软件设计原则
控制反转
依赖注入
Bean对象
如何将类产生的对象交给IOC容器管理#xff1f;
容器怎样才能提供依赖的bean对象呢#xff1f; 三层架构
Controller
控制…目录 三层架构
Controller
Service
Dao
编辑
调用过程
面向接口编程
分层解耦
耦合
内聚
软件设计原则
控制反转
依赖注入
Bean对象
如何将类产生的对象交给IOC容器管理
容器怎样才能提供依赖的bean对象呢 三层架构
Controller
控制层也称为控制器主要职责是接收前端发来的请求并且给前端响应数据
Service
业务逻辑层负责具体的业务逻辑处理
Dao
数据访问层也叫持久层负责数据访问操作包括数据的增删改查
在mybatis中通常叫mapper 调用过程
浏览器发起请求先访问Controller而Controller层仅仅负责接收请求响应数据并不负责逻辑处理所以Controller要去调用ServiceService再来进行逻辑处理而Service进行逻辑处理的前提是要拿到数据所以Service再来调用DaoDao再来访问文件从文件中加载数据Dao将数据加载回来后访问ServiceService再来对数据进行逻辑处理逻辑处理完毕后再将处理后的数据返回给ControllerController再将数据响应给前端 面向接口编程
将来项目会升级项目中的数据肯定不会在文件中存储他是要存储在专门的数据库中这个时候又要定义一个dao这个dao要从数据库中加载数据也有可能项目中的数据来源于网络这个时候要再定义一个dao那么dao层就会有多种实现多种实现加载的数据来源是不一样的。那在项目中为了提高程序的拓展性便于项目的统一维护管理我们通常会为dao的多种实现提供一个统一的接口在接口中定义一个统一的规范允许的不同的实现各个实现来实现统一的接口也就是面向接口编程 提供一个统一的接口 分层解耦
耦合
衡量软件中各个层/各个模块的依赖关联程度
业务层Service代码发生变化Contrller层代码也要发生跟着变化我们成为Controller和Service之间耦合了 内聚
软件中各个功能模块内部的功能联系
比如 userSerivice是用户信息操作的Service这个类中只会去处理用户相关的逻辑非用户相关的逻辑不会定义在这个类中我们就说这个类的内聚程度较高即高内聚
软件设计原则
高内聚低耦合
“高内聚”就是模块内部的联系越紧密越好“低耦合”是指模块与模块||层与层之间要降低耦合最好能做到解除耦合也就是所谓的“解耦”
解耦后service层的代码变动是不会影响controller层的dao层代码变动也不会影响service层 想要解耦就不能去new对象因为service层的代码发生变化new对象代码部分也要跟着变化那么层与层之间又耦合起来了 不去new对象声明了这个对象默认值就是null调用userService的list方法就会报空指针异常 如何做到不new对象解除耦合又能不报空指针异常呢
提供一个容器用来存储一些对象比如想用UserService这个实现类产生的对象那就可以将这个实现类产生的对象交给容器来管理在容器中就会产生UserService这个实现类产生的对象也就是这个一号对象 Controller运行时需要用到UserService这个类型的对象那么就可以从容器中查找这个对象让容器给应用程序来提供这个类型的对象 由此看来即使Service类的类名发生了变化或者切换了一个实现类对于Controller层来说是不用动任何的代码这样就完成了层与层的解耦
控制反转
简称IOC||Spring容器
对象的创建控制权由程序自身new转移到外部容器这种思想成为控制反转
依赖注入
简称DI
容器为应用程序提供运行时所依赖的资源这个过程称为依赖注入
Bean对象
在IOC容器中创建管理的对象称之为Bean对象
如何将类产生的对象交给IOC容器管理
在实现类上面加上注释Conponent代表将这个类交给IOC容器管理由IOC容器来负责这个对象的创建 如果是mybatis统一的接口xxxMapper则在接口上方加上注解Mapper代表程序运行时会自动为这个接口创建一个实现类对象代理对象并自动将该实现类对象存入IOC容器中成为IOC容器的bean对象 容器怎样才能提供依赖的bean对象呢
在成员变量上加上注解Autowired会自动找到容器中UserDao类型的对象并赋值给这个成员变量这样就完成了依赖注入的过程。