当前位置: 首页 > news >正文

江苏网站建设代理商成都装修网站制作

江苏网站建设代理商,成都装修网站制作,湖南响应式网站设计,网站怎么做动态主图目录 一#xff1a;Spring启示录 1. OCP开闭原则 2. 依赖倒置原则DIP 3. 控制反转IoC 二#xff1a;Spring概述 1. Spring简介 2. Spring8大模块 3. Spring特点 一#xff1a;Spring启示录 引言#xff1a;前面我们已经学习了三层架构#xff1a;表示层、业务层、…目录 一Spring启示录 1. OCP开闭原则 2. 依赖倒置原则DIP 3. 控制反转IoC 二Spring概述 1. Spring简介 2. Spring8大模块 3. Spring特点 一Spring启示录 引言前面我们已经学习了三层架构表示层、业务层、持久层表示层调业务层、业务层调持久层下面我们来写一段代码分析一下缺陷 表示层发出请求调用业务层 package com.powernode.oa.controller;import com.powernode.oa.service.UserService; import com.powernode.oa.service.impl.UserServiceImpl;public class UserController {// 调用业务层private UserService userService new UserServiceImpl();public void login(){String username admin;String password 123456;boolean success userService.login(username, password);if (success) {// 登录成功} else {// 登录失败}} }业务层编写业务逻辑调用持久层 注先编写一个接口UserService然后用类UserServiceImpl实现这个接口面向抽象编程 package com.powernode.oa.service.impl;import com.powernode.oa.bean.User; import com.powernode.oa.dao.UserDao; import com.powernode.oa.dao.impl.UserDaoImplForMySQL; import com.powernode.oa.service.UserService;public class UserServiceImpl implements UserService {// 调用持久层private UserDao userDao new UserDaoImplForMySQL();public boolean login(String username, String password) {User user userDao.selectByUsernameAndPassword(username, password);if (user ! null) {return true;}return false;} }持久层用来与数据库交互 注编写一个接口UserDaoImpl然后用类UserDaoImplForMySQL实现这个接口面向抽象编程 package com.powernode.oa.dao.impl;import com.powernode.oa.bean.User; import com.powernode.oa.dao.UserDao;public class UserDaoImplForMySQL implements UserDao {public User selectByUsernameAndPassword(String username, String password) {// 连接MySQL数据库根据用户名和密码查询用户信息return null;} }从上面可以看出UserDaoImplForMySQL中主要是连接MySQL数据库进行操作。如果更换到Oracle数据库上则需要再提供一个UserDaoImplForOracle这就是对功能的扩展但是添加了一个新的类UserDaoImplForOracle来应付数据库的变化这个变化会引起连锁反应如果想要切换到Oracle数据库上UserServiceImpl类代码就需要修改 1. OCP开闭原则 ①这样一来就违背了开闭原则OCP ②开闭原则在软件开发过程中应当对扩展开放对修改关闭。也就是说如果在进行功能扩展的时候添加额外的类是没问题的但因为功能扩展而修改之前运行正常的程序是不被允许的。因为一旦修改之前运行正常的程序就会导致项目整体要进行全方位的重新测试这是相当麻烦的过程 ③导致以上问题的主要原因是代码和代码之间的耦合度太高如下图所示 可以很明显的看出上层是依赖下层的。UserController依赖UserServiceImpl而UserServiceImpl依赖UserDaoImplForMySQL这样就会导致下面只要改动上面必然会受牵连跟着也会改这样也就同时违背了另一个开发原则依赖倒置原则DIP 2. 依赖倒置原则DIP 依赖倒置原则(Dependence Inversion Principle)简称DIP主要倡导面向抽象编程面向接口编程不要面向具体编程让上层不再依赖下层下面改动了上面的代码不会受到牵连。这样可以大大降低程序的耦合度耦合度低了扩展力就强了同时代码复用性也会增强。软件七大开发原则都是在为解耦合服务 但是我们已经先定义接口然后类实现接口已经面向接口编程了啊 确实已经面向接口编程了但对象的创建是new UserDaoImplForOracle()显然并没有完全面向接口编程还是使用到了具体的接口实现类。什么叫做完全面向接口编程什么叫做完全符合依赖倒置原则呢请看以下代码 如果代码是这样编写的才算是完全面向接口编程才符合依赖倒置原则但是这样userDao是null在执行的时候就会出现空指针异常确实是这样的所以我们要解决这个问题。解决空指针异常的问题其实就是解决两个核心的问题 ①第一个问题谁来负责对象的创建【也就是说谁来new UserDaoImplForOracle()/new UserDaoImplForMySQL()】 ②第二个问题谁来负责把创建的对象赋到这个属性上【也就是说谁来把上面创建的对象赋给userDao属性】 如果把以上两个核心问题解决了就可以做到既符合OCP开闭原则又符合依赖倒置原则 幸运的是Spring框架可以做到在Spring框架中它可以帮助我们new对象并且它还可以将new出来的对象赋到属性上。换句话说Spring框架可以帮助我们创建对象并且可以帮助我们维护对象和对象之间的关系。比如 Spring既可以new出来UserDaoImplForMySQL对象也可以new出来UserDaoImplForOracle对象并且还可以让new出来的dao对象和service对象产生关系产生关系其实本质上就是给属性赋值。很显然这种方式是将对象的创建权/管理权交出去了不再使用硬编码的方式了像这种把对象的创建权/管理权交出去了被称为控制反转IoC。 3. 控制反转IoC 控制反转Inversion of Control缩写为IoC是面向对象编程中的一种设计思想可以用来降低代码之间的耦合度符合依赖倒置原则。 反转的是两件事 ①第一件事我不在程序中采用硬编码的方式来new对象了。new对象我不管了new对象的权利交出去了 ②第二件事我不在程序中采用硬编码的方式来维护对象的关系了。对象之间关系的维护权我也不管了交出去了 控制反转的核心是将对象的创建权交出去将对象和对象之间关系的管理权交出去由第三方容器来负责创建与维护 控制反转常见的实现方式依赖注入Dependency Injection简称DI通常依赖注入的实现由包括两种方式 ①set方法注入执行set方法给属性赋值 ②构造方法注入执行构造方法给属性赋值 依赖注入 中 “依赖”是什么意思 “注入”是什么意思 ①依赖A对象和B对象的关系。 ②注入是一种手段通过这种手段可以让A对象和B对象产生关系。 ③依赖注入对象A和对象B之间的关系靠注入的手段来维护而注入包括set注入和构造注入。 注控制反转是思想依赖注入是这种思想的具体实现方式 Spring框架就是一个实现了IoC思想的框架。IoC可以认为是一种全新的设计模式但是理论和时间成熟相对较晚并没有包含在GoF中。GoF指的是23种设计模式 总结术语①OCP开闭原则开发原则②DIP依赖倒置原则开发原则③IoC控制反转一种思想一种新型的设计模式④DI依赖注入控制反转思想的具体实现方式 二Spring概述 1. Spring简介 官网地址https://spring.io/ Spring是一个开源框架它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。从简单性、可测试性和松耦合的角度而言任何Java应用都可以从Spring中受益。 ①Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。 ②Spring最初的出现是为了解决EJB臃肿的设计以及难以测试等问题。 ③Spring为简化开发而生让程序员只需关注核心业务的实现尽可能的不再关注非业务逻辑代码事务控制安全日志等。 2. Spring8大模块 注意Spring5版本之后是8个模块在Spring5中新增了WebFlux模块。Spring的两大核心模块控制反转(IoC)和面向切面(AOP)面向切面(AOP)底层的实现也是基于控制反转(IoC)的其它模块也都用到了AOPIoC ①Spring Core模块 这是Spring框架最基础的部分它提供了依赖注入DependencyInjection特征来实现容器对Bean的管理。核心容器的主要组件是 BeanFactoryBeanFactory是工厂模式的一个实现是任何Spring应用的核心。它使用IoC将应用配置和依赖从实际的应用代码中分离出来。 ②Spring Context模块 如果说核心模块中的BeanFactory使Spring成为容器的话那么上下文模块就是Spring成为框架的原因。这个模块扩展了BeanFactory增加了对国际化I18N消息、事件传播、验证的支持。另外提供了许多企业服务例如电子邮件、JNDI访问、EJB集成、远程以及时序调度scheduling服务。也包括了对模版框架例如Velocity和FreeMarker集成的支持 ③Spring AOP模块 Spring在它的AOP模块中提供了对面向切面编程的丰富支持Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP不用依赖组件就可以将声明性事务管理集成到应用程序中可以自定义拦截器、切点、日志等操作。 ④Spring DAO模块 提供了一个JDBC的抽象层和异常层次结构消除了烦琐的JDBC编码和数据库厂商特有的错误代码解析用于简化JDBC。 ⑤Spring ORM模块 Spring提供了ORM模块。Spring并不试图实现它自己的ORM解决方案而是为几种流行的ORM框架提供了集成方案包括Hibernate、JDO和iBATIS SQL映射这些都遵从 Spring 的通用事务和 DAO 异常层次结构。 ⑥Spring Web MVC模块 Spring为构建Web应用内置提供了一个功能全面的MVC框架。虽然Spring可以很容易地与其它MVC框架集成例如Struts但Spring的MVC框架使用IoC对控制逻辑和业务对象提供了完全的分离。 ⑦Spring Web模块 Web 上下文模块建立在应用程序上下文模块之上为基于 Web 的应用程序提供了上下文提供了Spring和其它Web框架的集成比如Struts、WebWork。还提供了一些面向服务支持例如实现文件上传的multipart请求。 ⑧Spring WebFlux模块 Spring Framework 中包含的原始 Web 框架 Spring Web MVC 是专门为 Servlet API 和 Servlet 容器构建的。反应式堆栈 Web 框架 Spring WebFlux 是在 5.0 版的后期添加的它是完全非阻塞的支持反应式流(Reactive Stream)背压并在NettyUndertow和Servlet 3.1容器等服务器上运行。 3. Spring特点 ①轻量 ①从大小与开销两方面而言Spring都是轻量的完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布并且Spring所需的处理开销也是微不足道的。 ②Spring是非侵入式的Spring应用中的对象不依赖于Spring的特定类。 ②控制反转 Spring通过一种称作控制反转IoC的技术促进了松耦合。当应用了IoC一个对象依赖的其它对象会通过被动的方式传递进来而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖而是容器在对象初始化时不等对象请求就主动将依赖传递给它。 注JNDI是Java命名和目录接口是Java编程语言中接口的名称(JNDI)。它是一个API(应用程序接口) ③面向切面 Spring提供了面向切面编程的丰富支持允许通过分离应用的业务逻辑与系统级服务例如审计auditing和事务transaction管理进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责甚至是意识其它的系统级关注点例如日志或事务支持。 ④容器 Spring包含并管理应用对象的配置和生命周期在这个意义上它是一种容器你可以配置你的每个bean如何被创建——基于一个可配置原型prototype你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而Spring不应该被混同于传统的重量级的EJB容器它们经常是庞大与笨重的难以使用。 ⑤框架 Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中应用对象被声明式地组合典型地是在一个XML文件里。Spring也提供了很多基础功能事务管理、持久化框架集成等等将应用逻辑的开发留给了你。 所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码它们也为Spring中的各种模块提供了基础支持。 注Spring6要求JDK最低版本是Java17
http://www.dnsts.com.cn/news/103923.html

相关文章:

  • 自己做的网站怎么上传到域名售后网站用什么模板
  • 网站建设信息发布平台vip视频解析网站怎么做
  • 桂林公司网站搭建电子商务网站建设以什么为核心
  • 上线了网站怎么样做网站时背景图片浮动
  • 湘西 网站 建设 公司秦皇岛旅游攻略
  • 建设网站创业南阳seo招聘
  • 满山红网站建设公司互联网创业好项目
  • wordpress数据库更改密码北京首都功能优化
  • 网站备案域名还是空间销售公司做网站
  • 网站建设 提案 框架标识公司
  • 网站建设需要哪些流程python做一个简单的网页
  • 深圳营销型网站策划电子工程职业学院
  • 爱站网关键词挖掘查询工具培训机构优化
  • 龙岗网站优化培训logo设计在线生成免费版
  • 网站文章伪原创如何做专注高端网站建设
  • 如何选择家居网站建设html网页设计作品代码编写
  • 微信公众号搭建网站济南seo整站优化招商电话
  • 40万用户自助建站免费个人网站模板
  • 专门做文创产品的网站wordpress4.7.4主题
  • 投资公司网站建设意义中文搜索引擎排行榜
  • 百度搜索引擎推广河南企业站seo
  • 网站搭建免费模板做网站需要多少屏
  • 做家教有哪些比较好的网站提升学历有哪几种途径
  • 做网站手机公司裁员辞退员工补偿标准2023
  • 外贸网站制作价格表黄冈论坛百度贴吧
  • 做健身俱乐部网站的目的和意义论文格式样板模板
  • dede网站建设的个人总结企业网站对网络营销的意义
  • 网站开发项目计划书ppt高级网络营销师
  • 国外免费logo设计网站番禺响应式网站开发
  • 太原cms建站教育培训学校网站建设策划