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

新开传奇网站发布网单职业wordpress建站网页无法运作

新开传奇网站发布网单职业,wordpress建站网页无法运作,超值高端网站设计,旺店通erp系统SpingBoot原理 在前面十多天的课程当中#xff0c;我们学习的都是web开发的技术使用#xff0c;都是面向应用层面的#xff0c;我们学会了怎 么样去用。而我们今天所要学习的是web后端开发的最后一个篇章springboot原理篇#xff0c;主要偏向于底 层原理。 我们今天的课程…SpingBoot原理 在前面十多天的课程当中我们学习的都是web开发的技术使用都是面向应用层面的我们学会了怎 么样去用。而我们今天所要学习的是web后端开发的最后一个篇章springboot原理篇主要偏向于底 层原理。 我们今天的课程安排包括这么三个部分 配置优先级Springboot项目当中属性配置的常见方式以及配置的优先级 Bean的管理 剖析Springboot的底层原理 1. 配置优先级 在我们前面的课程当中我们已经讲解了SpringBoot项目当中支持的三类配置文件 application.propertiesapplication.ymlapplication.yaml 在SpringBoot项目当中我们要想配置一个属性可以通过这三种方式当中的任意一种来配置都可 以那么如果项目中同时存在这三种配置文件且都配置了同一个属性如Tomcat端口号到底哪一份配置文件生效呢 application.propertiesserver.port8081application.ymlserver:port:8082application.yamlserver:port8081我们启动SpringBoot程序测试下三个配置文件中哪个Tomcat端口号生效 properties、yaml、yml三种配置文件同时存在 properties、yaml、yml三种配置文件优先级最高的是properties yaml、yml两种配置文件同时存在 配置文件优先级排名从高到低 properties配置文件yml配置文件yaml配置文件 注意事项虽然springboot支持多种格式配置文件但是在项目开发时推荐统一使用一种格式的配置。yml是主流 在SpringBoot项目当中除了以上3种配置文件外SpringBoot为了增强程序的扩展性除了支持配置文件的配置方式以外还支持另外两种常见的配置方式 Java系统属性配置 格式 -Dkeyvalue-Dserver.port9000命令行参数 格式–keyvalue--server.port10010那在idea当中运行程序时如何来指定Java系统属性和命令行参数呢 编辑启动程序的配置信息 重启服务同时配置Tomcat端口(三种配置文件、系统属性、命令行参数)测试哪个Tomcat端口号生效 删除命令行参数配置重启SpringBoot服务 优先级 命令行参数 系统属性参数 properties参数 yml参数 yaml参数 思考如果项目已经打包上线了这个时候我们又如何来设置Java系统属性和命令行参数呢 java -Dserver.port9000 -jar XXXXX.jar --server.port10010下面我们来演示下打包程序运行时指定Java系统属性和命令行参数 执行maven打包指令package把项目打成jar文件使用命令java -jar 方式运行jar文件程序 项目打包 运行jar程序 同时设置Java系统属性和命令行参数 仅设置Java系统属性 注意事项 Springboot项目进行打包时需要引入插件 spring-boot-maven-plugin (基于官网 骨架创建项目会自动添加该插件) 在SpringBoot项目当中常见的属性配置方式有5种 3种配置文件加上2种外部属性的配置(Java 系统属性、命令行参数)。通过以上的测试我们也得出了优先级(从低到高) application.yaml忽略application.ymlapplication.propertiesjava系统属性-Dxxxxxx命令行参数–xxxxxx 2. Bean管理 在前面的课程当中我们已经讲过了我们可以通过Spring当中提供的注解Component以及它的三个衍生注解Controller、Service、Repository来声明IOC容器中的bean对象同时我们也学习了如何为应用程序注入运行时所需要依赖的bean对象也就是依赖注入DI。 我们今天主要学习IOC容器中Bean的其他使用细节主要学习以下三方面 如何从IOC容器中手动的获取到bean对象bean的作用域配置管理第三方的bean对象 接下来我们先来学习第一方面从IOC容器中获取bean对象。 2.1 获取Bean 默认情况下SpringBoot项目在启动的时候会自动创建IOC容器(也称为Spring容器)并且在启动的过程当中会自动的将bean对象都创建好存放在IOC容器当中。应用程序在运行时需要依赖什么bean对象就直接进行依赖注入就可以了。 而在Spring容器中提供了一些方法可以主动从IOC容器中获取到bean对象下面介绍3种常用方式 根据name获取bean Object getBean(String name)根据类型获取bean T T getBean(ClassT requiredType)根据name获取bean带类型转换 T T getBean(String name, ClassT requiredType)思考要从IOC容器当中来获取到bean对象需要先拿到IOC容器对象怎么样才能拿到IOC容器呢 想获取到IOC容器直接将IOC容器对象注入进来就可以了 控制器DeptController RestController RequestMapping(/depts) public class DeptController {Autowiredprivate DeptService deptService;public DeptController(){System.out.println(DeptController constructor ....);}GetMappingpublic Result list(){ListDept deptList deptService.list();return Result.success(deptList);}DeleteMapping(/{id})public Result delete(PathVariable Integer id) {deptService.delete(id);return Result.success();}PostMappingpublic Result save(RequestBody Dept dept){deptService.save(dept);return Result.success();} }业务实现类DeptServiceImpl Slf4j Service public class DeptServiceImpl implements DeptService {Autowiredprivate DeptMapper deptMapper;Overridepublic ListDept list() {ListDept deptList deptMapper.list();return deptList;}Overridepublic void delete(Integer id) {deptMapper.delete(id);}Overridepublic void save(Dept dept) {dept.setCreateTime(LocalDateTime.now());dept.setUpdateTime(LocalDateTime.now());deptMapper.save(dept);} }Mapper接口 Mapper public interface DeptMapper {// 查询全部部门数据Select(select * from dept)ListDept list();// 删除部门Delete(delete from dept where id #{id})void delete(Integer id);// 新增部门Insert(insert into dept(name, create_time, update_time) values(#{name},#{createTime},#{updateTime}))void save(Dept dept); }测试类 SpringBootTest class SpringbootWebConfig2ApplicationTests {Autowiredprivate ApplicationContext applicationContext; //IOC容器对象// 获取bean对象Testpublic void testGetBean(){// 根据bean的名称获取DeptController bean1 (DeptController)applicationContext.getBean(deptController);System.out.println(bean1);// 根据bean的类型获取DeptController bean2 applicationContext.getBean(DeptController.class);System.out.println(bean2);// 根据bean的名称 及 类型获取DeptController bean3 applicationContext.getBean(deptController, DeptController.class);System.out.println(bean3);} }程序运行后控制台日志 问题输出的bean对象地址值是一样的说明IOC容器当中的bean对象有几个 答案只有一个。 默认情况下IOC中的bean对象是单例 那么能不能将bean对象设置为非单例的(每次获取的bean都是一个新对象) 可以在下一个知识点(bean作用域)中讲解。 注意事项 上述所说的 【Spring项目启动时会把其中的bean都创建好】还会受到作用域及延迟初始化影响这里主要针对于默认的单例非延迟加载的bean而言。 2.2 Bean作用域 在前面我们提到的IOC容器当中默认bean对象是单例模式(只有一个实例对象)。那么如何设置bean对象为非单例呢需要设置bean的作用域。 在Spring中支持五种作用域后三种在web环境才生效 作用域说明singleton容器内同名称的bean只有一个实例单例默认prototype每次使用该bean时会创建新的实例非单例request每个请求范围内会创建新的实例web环境中了解session每个会话范围内会创建新的实例web环境中了解application每个应用范围内会创建新的实例web环境中了解 知道了bean的5种作用域了我们要怎么去设置一个bean的作用域呢 可以借助Spring中的Scope注解来进行配置作用域 1). 测试一 控制器 //默认bean的作用域为singleton (单例) Lazy //延迟加载第一次使用bean对象时才会创建bean对象并交给ioc容器管理 RestController RequestMapping(/depts) public class DeptController {Autowiredprivate DeptService deptService;public DeptController(){System.out.println(DeptController constructor ....);}//省略其他代码... }测试类 SpringBootTest class SpringbootWebConfig2ApplicationTests {Autowiredprivate ApplicationContext applicationContext; //IOC容器对象//bean的作用域Testpublic void testScope(){for (int i 0; i 10; i) {DeptController deptController applicationContext.getBean(DeptController.class);System.out.println(deptController);}} }重启SpringBoot服务运行测试方法查看控制台打印的日志 注意事项 IOC容器中的bean默认使用的作用域singleton (单例) 默认singleton的bean在容器启动时被创建可以使用Lazy注解来延迟初始化(延迟到 第一次使用时) 2). 测试二 修改控制器DeptController代码 Scope(prototype) //bean作用域为非单例 Lazy //延迟加载 RestController RequestMapping(/depts) public class DeptController {Autowiredprivate DeptService deptService;public DeptController(){System.out.println(DeptController constructor ....);}//省略其他代码... }重启SpringBoot服务再次执行测试方法查看控制吧打印的日志 注意事项 prototype的bean每一次使用该bean的时候都会创建一个新的实例实际开发当中绝大部分的Bean是单例的也就是说绝大部分Bean不需要配置scope属性 2.3 第三方Bean 学习完bean的获取、bean的作用域之后接下来我们再来学习第三方bean的配置。 之前我们所配置的bean像controller、servicedao三层体系下编写的类这些类都是我们在项目当中自己定义的类(自定义类)。当我们要声明这些bean也非常简单我们只需要在类上加上Component以及它的这三个衍生注解Controller、Service、Repository就可以来声明这个bean对象了。 但是在我们项目开发当中还有一种情况就是这个类它不是我们自己编写的而是我们引入的第三方依赖当中提供的。 在pom.xml文件中引入dom4j !--Dom4j-- dependencygroupIdorg.dom4j/groupIdartifactIddom4j/artifactIdversion2.1.3/version /dependencydom4j就是第三方组织提供的。 dom4j中的SAXReader类就是第三方编写的。 当我们需要使用到SAXReader对象时直接进行依赖注入是不是就可以了呢 按照我们之前的做法需要在SAXReader类上添加一个注解Component将当前类交给IOC容器 管理 结论第三方提供的类是只读的。无法在第三方类上添加Component注解或衍生注解。 那么我们应该怎样使用并定义第三方的bean呢 如果要管理的bean对象来自于第三方不是自定义的是无法用Component 及衍生注解声明bean的就需要用到Bean注解。 解决方案1在启动类上添加Bean标识的方法 SpringBootApplication public class SpringbootWebConfig2Application {public static void main(String[] args) {SpringApplication.run(SpringbootWebConfig2Application.class, args);}// 声明第三方beanBean // 将当前方法的返回值对象交给IOC容器管理, 成为IOC容器beanpublic SAXReader saxReader(){return new SAXReader();} }xml文件 ?xml version1.0 encodingUTF-8? empnameTom/nameage18/age /emp测试类 SpringBootTest class SpringbootWebConfig2ApplicationTests {Autowiredprivate SAXReader saxReader;//第三方bean的管理Testpublic void testThirdBean() throws Exception {Document document saxReader.read(this.getClass().getClassLoader().getResource(1.xml));Element rootElement document.getRootElement();String name rootElement.element(name).getText();String age rootElement.element(age).getText();System.out.println(name : age);}//省略其他代码... }重启SpringBoot服务执行测试方法后控制台输出日志 Tom : 18说明以上在启动类中声明第三方Bean的作法不建议使用项目中要保证启动类的纯粹性 解决方案2在配置类中定义Bean标识的方法 如果需要定义第三方Bean时 通常会单独定义一个配置类 Configuration //配置类 (在配置类当中对第三方bean进行集中的配置管理) public class CommonConfig {//声明第三方beanBean //将当前方法的返回值对象交给IOC容器管理, 成为IOC容器bean//通过Bean注解的name/value属性指定bean名称, 如果未指定, 默认是方法名public SAXReader reader(DeptService deptService){System.out.println(deptService);return new SAXReader();} }注释掉SpringBoot启动类中创建第三方bean对象的代码重启服务执行测试方法查看控制台日志 Tom : 18在方法上加上一个Bean注解Spring 容器在启动的时候它会自动的调用这个方法并将方法的返回值声明为Spring容器当中的Bean对象。 注意事项 通过Bean注解的name或value属性可以声明bean的名称如果不指定默认bean的名称就是方法名。如果第三方bean需要依赖其它bean对象直接在bean定义方法中设置形参即可容器会根据类型自动装配。 关于Bean大家只需要保持一个原则 如果是在项目当中我们自己定义的类想将这些类交给IOC容器管理我们直接使用Component以及它的衍生注解来声明就可以。如果这个类它不是我们自己定义的而是引入的第三方依赖当中提供的类而且我们还想将这个类交给IOC容器管理。此时我们就需要在配置类中定义一个方法在方法上加上一个Bean注解通过这种方式来声明第三方的bean对象。 3. SpringBoot原理 经过前面10多天课程的学习大家也会发现基于SpringBoot进行web程序的开发是非常简单、非常高效的。 SpringBoot使我们能够集中精力地去关注业务功能的开发而不用过多地关注框架本身的配置使用。而我们前面所讲解的都是面向应用层面的技术接下来我们开始学习SpringBoot的原理这部分内容偏向于底层的原理分析。 在剖析SpringBoot的原理之前我们先来快速回顾一下我们前面所讲解的Spring家族的框架。 Spring是目前世界上最流行的Java框架它可以帮助我们更加快速、更加容易的来构建Java项目。而在Spring家族当中提供了很多优秀的框架而所有的框架都是基于一个基础框架的SpringFramework(也就是Spring框架)。而前面我们也提到如果我们直接基于Spring框架进行项目的开发会比较繁琐。 这个繁琐主要体现在两个地方 在pom.xml中依赖配置比较繁琐在项目开发时需要自己去找到对应的依赖还需要找到依赖它所配套的依赖以及对应版本否则就会出现版本冲突问题。在使用Spring框架进行项目开发时需要在Spring的配置文件中做大量的配置这就造成Spring框架入门难度较大学习成本较高。 基于Spring存在的问题官方在Spring框架4.0版本之后又推出了一个全新的框架SpringBoot。 通过 SpringBoot来简化Spring框架的开发(是简化不是替代)。我们直接基于SpringBoot来构建Java项目会让我们的项目开发更加简单更加快捷。 SpringBoot框架之所以使用起来更简单更快捷是因为SpringBoot框架底层提供了两个非常重要的功能一个是起步依赖一个是自动配置。 通过SpringBoot所提供的起步依赖就可以大大的简化pom文件当中依赖的配置从而解决了Spring框架当中依赖配置繁琐的问题。 通过自动配置的功能就可以大大的简化框架在使用时bean的声明以及bean的配置。我们只需要引入程序开发时所需要的起步依赖项目开发时所用到常见的配置都已经有了我们直接使用就可以了。 简单回顾之后接下来我们来学习下SpringBoot的原理。其实学习SpringBoot的原理就是来解析SpringBoot当中的起步依赖与自动配置的原理。我们首先来学习SpringBoot当中起步依赖的原理。 3.1 起步依赖 假如我们没有使用SpringBoot用的是Spring框架进行web程序的开发此时我们就需要引入web程序开发所需要的一些依赖。 spring-webmvc依赖这是Spring框架进行web程序开发所需要的依赖 servlet-api依赖Servlet基础依赖 jackson-databind依赖JSON处理工具包 如果要使用AOP还需要引入aop依赖、aspect依赖 项目中所引入的这些依赖还需要保证版本匹配否则就可能会出现版本冲突问题。 如果我们使用了SpringBoot就不需要像上面这么繁琐的引入依赖了。我们只需要引入一个依赖就可以了那就是web开发的起步依赖springboot-starter-web。 为什么我们只需要引入一个web开发的起步依赖web开发所需要的所有的依赖都有了呢 因为Maven的依赖传递。 在SpringBoot给我们提供的这些起步依赖当中已提供了当前程序开发所需要的所有的常见依赖官网地址https://docs.spring.io/spring-boot/docs/2.7.7/referen ce/htmlsingle/#using.build-systems.starters 。比如springboot-starter-web这是web开发的起步依赖在web开发的起步依赖当 中就集成了web开发中常见的依赖json、web、webmvc、tomcat等。我们只需要引入这一个起步依赖其他的依赖都会自动的通过Maven的依赖传递进来。 结论起步依赖的原理就是Maven的依赖传递。
http://www.w-s-a.com/news/506044/

相关文章:

  • 海南省住房和城乡建设厅官方网站网站开发有哪些语言
  • 网站开发排期表免费网站建设策划
  • 飞沐网站设计江苏建设人才网证书查询
  • 网站优化的意义怎么帮商家推广赚钱
  • 安顺公司做网站福州建设发展集团有限公司网站
  • 普陀企业网站建设做散客机票的网站如何推广
  • 河北网站建设与制作建设宁波市分行的互联网网站
  • python做网站是不是特别慢百度推广基木鱼
  • 卖网站链接东营住房和城乡建设信息网
  • 网站后台如何上传ico图标单位建设网站需要的材料
  • 如何建淘客网站郑州做网站最好的公司
  • 连锁酒店网站方案o2o网站建设方案
  • 功能型网站响应式网站原理
  • 聊城建设网站骨干校 建设网站
  • 网站建设与管理是干嘛的中国新闻社是什么单位
  • 帮别人做视频剪辑的网站传业做微采商城网站
  • 设计一个网站开发方案宣传片制作企业
  • 新网站收录多少关键词免费一键网站
  • 网页制作与网站建设 在线作业手表网站制作照片
  • 电商网站开发技术与维护重庆建筑工程交易信息网
  • 人和马做的网站线上营销推广方式
  • 青海教育厅门户网站有赞商城
  • 网站建设多语种自动翻译插件wordpress谷歌翻译插件
  • 泰安高级网站建设推广wordpress教程 好看
  • 我自己的网站怎么做关键词优化泰安网站建设dxkjw
  • 平面设计做画册用网站泰州seo平台
  • 申请一个域名后怎么做网站evernote wordpress
  • 网站左侧导航栏设计网站开发后台数据怎么来
  • 临西做网站报价网站建设需要写语句吗
  • 建设网站网站首页购物网站开发代码