springBoot

来源:互联网 发布:深圳奥凯软件 编辑:程序博客网 时间:2024/06/14 19:36

1、微服务、微框架

springBoot是的springMVC升级版,两者没有必然的联系,可以直接学springBoot。
这里写图片描述
微服务:当下比较流行的架构或者说解决方案,很多公司都在用,spring家族为微服务架构提供了一整套组件,统称为SpringCloud。要使用SpringCloud就必须要先学会使用SpringBoot,SpringCloud是建立在SpringBoot的基础之上,学习SpringBoot为微服务打基础。
这里写图片描述

属性配置(例如下图是数据库的配置):

这里写图片描述

@Value:实现配置文件(这里是yml文件)的注入,随着配置文件的增加,建议对配置文件做一个分组,那么就要用到(读yml中的属性)
@Component@ConfigurationProperties. – 把配置写到类里面去,最好做一个分组

spring:  profiles:    active: dev  datasource:    driver-class-name: com.mysql.jdbc.Driver    url: jdbc:mysql://127.0.0.1:3306/dbgirl    username: root    password: admin  jpa:    hibernate:      ddl-auto: update    show-sql: true
//获取前缀是girl的配置  获取yml配置//把girl下面的那些属性都映射过来@Component //要在controller中注入,需要这个注解。@ConfigurationProperties(prefix = "girl")public class GirlProperties {    private String cupSize;    private Integer age;    public String getCupSize() {        return cupSize;    }    public void setCupSize(String cupSize) {        this.cupSize = cupSize;    }    public Integer getAge() {        return age;    }    public void setAge(Integer age) {        this.age = age;    }}
controller的使用

这里写图片描述
@Controller – 如果不加这个注解,浏览器是无法访问到的
(@Controller必须配合模板使用,但是模板不推荐,所以要配合@ResponseBody)
@RestController等同于@Controller和@ResponseBody的组合//写上这个注解,自动返回json格式数据

模板的方式了解下就行,因为
现在开发方式都是前后端分离的,后端只需要提供一些rest接口返回json格式给前端就可以了。而不用模板的方式,用模板的方式会给性能带来很大的损耗,

处理url映射:@RequestMapping(value = {"/hello","/hi"},method = RequestMethod.GET)RequestMethod.GET还是要指定,因为使用的场景不同,为了安全起见还是要指定。

这里写图片描述

处理url里的参数:@GetMapping(value = "/say")public String say(@PathVariable("id") Integer myId){        return "id: " + myId;//        return girlProperties.getCupSize();    }http://127.0.0.1/hello/say/23    @GetMapping(value = "/say")  //推荐这个写法,和下面两行等同//@PostMapping(value = "/say")//@RequestMapping(value = {"/hello","/hi"},method = RequestMethod.GET)public String say(@RequestParam(value = "id",required = false,defaultValue = "0") Integer myId){        return "id: " + myId;//        return girlProperties.getCupSize();    }http://127.0.0.1/hello/say?id=23不管用get还是post都用@RequestParam来获取请求参数的值

这里写图片描述

JPA – 就是一个标准,不是组件也不是系统,就是文本上的一个规范
这里写图片描述
这里写图片描述

jpa:自动建表,简单的sql不用写

涉及到数据库就少不了事务
事务:做为单个逻辑工作单元执行的一系列操作,要么完全执行要么完全不执行。比如电商中:扣掉库存和扣掉用户的钱必须要一致。
只有查询中不用加事务,增删改都要加

2、SpringBoot进阶

这里写图片描述

1、表单验证。防止小白乱输入,防止黑客。
@PostMapping(value = "/girls")    public Girl girlAdd(@Valid Girl girl, BindingResult bindingResult) { //验证结果返回给bindingResult        if(bindingResult.hasErrors()){            System.out.println(bindingResult.getFieldError().getDefaultMessage());            return null;        }        girl.setCupSize(girl.getCupSize());        girl.setAge(girl.getAge());        return  girlRepository.save(girl);  //返回的是添加的对象    }
2、AOP统一处理请求日志

这里写图片描述
这里写图片描述
spring的两大核心:AOP和IOC。AOP:java .net c#里面都有实现AOP的思想
OOP:面向对象,java,c++,c#都是OOP – 垂直形成独立的类
POP:面向过程,c语言
AOP:面向切面编程。 – 水平切割(利用一种横切的技术将面向对象构建的类的庞大的体系进行水平的切割,并且将那些影响到了多个类的公共行为封装成可重用的模块,这个模块称为切面,所以叫面向切面编程。关键思想:看上图第三点)
举例:
这里写图片描述

需求:在controller的每个接口前都加日志。//目的:每次发请求要验证是否登陆    //思路1:加个构造方法,不可行,因为spring程序启动的时候已经把这些类实例化了,http请求再来的时候是不会执行构造方法的    //思路2:使用AOP
@Aspect@Component  //这个注解:把这个文件引入到spring容器中去public class HttpAspect {    private final static Logger logger = LoggerFactory.getLogger(HttpAspect.class);    //这里写业务逻辑代码:我们希望http在请求到controller里面的方法之前就把他们记录下来    @Pointcut("execution(public * com.imooc.controller.GirlController.*(..))")  //方法里面两个点表示,任何参数都被拦截    public void log(){    }    @Before("log()")    public void doBefore(JoinPoint joinpoint){//        logger.info("11111");        //这里要写的是记录http的请求了。        ServletRequestAttributes attributes =                (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();        HttpServletRequest request =  attributes.getRequest();        //url        logger.info("url={}",request.getRequestURL());   //后面的变量会填到{}里面去        //method        logger.info("method={}",request.getMethod());        //IP        logger.info("IP={}",request.getRemoteAddr());        //类方法        logger.info("class_method={}",joinpoint.getSignature().getDeclaringTypeName() + "."+                                        joinpoint.getSignature().getName());        //参数        logger.info("args={}",joinpoint.getArgs());    }    @After("log()")    public void doAfter(){        logger.info("2222");    }    //这里获取返回的内容    @AfterReturning(returning = "object" , pointcut = "log()")  //returning里面的内容就是入参:object    public void doAfterReturning(Object object){  //因为不知道传什么,这里写Object        logger.info("response={}",object.toString());  //如果返回是null,这里会抛系统异常    }}
import org.slf4j.Logger;  这是spring自带的日志框架,底层实现使用的是logbacks2017-12-02 22:17:53.914  INFO 61352 --- [nio-8080-exec-1] com.imooc.aspect.HttpAspect              : 11111才用记日志的方法显示的信息:时间 INFO日志 进程号(61352) 端口(8080) 哪个类打的日志 日志内容
3、异常不只是try catch

这里写图片描述

总结:
1、返回的格式固定好。才用的是Result对象,也就是http请求返回的最外层对象
2、为了解决逻辑在一个地方处理,另外一个地方不需要接收返回的信息,所以引入了异常。默认的Exception只接收mes字段,我们要有code字段,所以自己定义了个异常GirlException,所以又加了个捕获异常的类ExceptionHandle。捕获后返回的还是Result
3、最后把code和msg定义成一个枚举,方便统一维护异常信息。

4、测试用例写在代码里面去,项目发布的时候把所有的功能测试都跑一遍

开发完立马上线,无论写的多严谨都难保证没有bug
这里写图片描述

测试API,要用到@AutoConfigureMockMvc

mvn打包的时候会自动执行test用例,如果不想执行的话,可以用:
mvn clean package -Dmaven.test.skip=true

3、另一套视频

  • IOC–推荐用注解
  • AOP–推荐用配置
  • 从Spring3.x开始提供了Java配置方式,使用Java配置方式可以更好的理解你配置的Bean,现在我们就处于这个时代,并且Spring4.x和Spring boot都推荐使用java配置的方式。java配置的方式就是为了取代之前的xml配置的方式
  • springBoot并不是spring的一些新功能,只是为spring框架整合了很多第三方的框架技术,使用的时候可以简单的集成其他技术来使用
    springBoot一定要设置parent,springboot提供的parent。

运行springboot,首先出来一个spring的banner

/** *    xxxApplication这个类都是作为springboot的入口类 */@Controller  //没有它无法获得http请求@SpringBootApplication  //说明这是springboot的一个应用@Configuration     //表示自身就是一个配置。//通过该注解来表明该类是一个Spring的配置,相当于一个xml文件public class HelloApplication {    @RequestMapping("hello")    //该方法返回的内容添加到ResponseBody里去    //有了@ResponseBody就会使用消息转发器来输出返回的结果    @ResponseBody    public String hello(){        return "hhh";    }    //入口方法    public static void main(String[] args) {        SpringApplication.run(HelloApplication.class,args);    }}
一些启动信息TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)Starting Servlet Engine: Apache Tomcat/8.5.11Initializing Spring embedded WebApplicationContext Root WebApplicationContext: initialization completed in 2271 ms Mapping servlet: 'dispatcherServlet' to [/] Mapping filter: 'characterEncodingFilter' to: [/*] Mapping filter: 'hiddenHttpMethodFilter' to: [/*] Mapping filter: 'httpPutFormContentFilter' to: [/*] Mapping filter: 'requestContextFilter' to: [/*]

springboot开发的时候用的是内嵌的tomcat,发布的时候用的是独立的tomcat

4、另一套视频

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

springboot默认使用的json解析框架是jackson

5、另一套视频

可以用idea创建springboot项目,也可以创建一个普通的maven项目再改pom即可。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 在家里面着急没办法干活怎么办 1岁宝宝脾气暴躁怎么办 档案不在中国海峡人才市场怎么办 海丰西中街吃鸡钱包给拿了怎么办? 朝鲜成为经济强国中国怎么办 窗户上有哈气水怎么办 阳台下水管声音好大怎么办 一开水龙头会响怎么办 海里遇到暗流怎么办贴吧 东海通忘记客户号怎么办 证券客户号忘了怎么办 热收缩机有空气怎么办 韩国国籍签证到期想回国怎么办 休闲裤裤脚长了怎么办 电大本科统考考不过怎么办 一案涉及两个法律关系怎么办 法院调解书被告不执行怎么办 电视cas授权已过期怎么办 网贷逾期被仲裁怎么办 word所选内容无效怎么办 wps批注不显示了怎么办 船舶挂靠船务公司去要怎么办 被螃蟹扎了肿了怎么办 手指被海鲜刺了怎么办 被海鲜刺进去了怎么办 手被海鲜扎了怎么办 环评设备写错了怎么办 物业对高空抛物怎么办 如果法官不公平判案我该怎么办? 民事案夸省审理案件不公平怎么办 积目头像未通过审核怎么办 电压不稳空调带不动怎么办 孩子吃了塑料珠怎么办 美的电压力锅打不开盖子怎么办 瓶盖打不开怎么办 瓶子是玻璃的 杯子口关错位了怎么办 大玻璃瓶的玻璃瓶盖拧不开怎么办 按压式洗发水瓶盖打不开怎么办 向下按压的瓶盖打不开怎么办 玻璃罐头开过了打不开怎么办 玻璃瓶的塑料盖子打不开怎么办