springboot初学 摘记

最近搞了点后端 摘记下

1. 什么是spring boot?
     Spring boot基于spring,为了解决使用spring框架时配置繁多、部署流程复杂、开发效率低等问题,可以创建独立的应用程序,嵌入了tomcat、jetty等,可以直接启动应用程序而不需要外部的容器。
    同时,spring boot可以自动配置spring应用,并且将一些框架的依赖包整合起来。比如开发web程序只需要引入web的starter,极大的简化了包的引用。

2. spring boot有什么优点?
     Spring boot响应了spring4倡导微服务的理念,所谓微服务,就是将一个大的功能拆分成若干个微小的服务分别进行部署,spring boot可以很好的达成这一目的
首先,spring的部署非常简单,不需要事先搭框架,只需要在pom文件中引入封装好的依赖包就可以使用一类服务。

其次,程序的配置简单,spring boot会尽可能的自动进行配置,最简单的,只要引入了web,就不需要web.xml这些配置文件,spring boot统统可以帮你做好,极大地简化了配置。同时,spring boot在spring的基础上提供了额外的众多注解,如:@SpringBootApplication,@EnableAutoConfiguration,@EnableDbCounting等注解,利用这些注解,几乎可以完全抛弃xml配置文件,可以实现应用的全注解配置。

最后,spring boot的启动很简单,在上一节已经提到,spring boot集成了tomcat、jetty,不需要外部的容器就可以直接部署运行,启动方便。

3. 与阿里的webx的对比
spring boot与webx根本上不属于一个维度的东西,不过目前主要学习了这两种框架,在这里抽离出共同的部分做个比较。
spring boot和webx一个根本的相似点就是都是基于spring框架;
spring boot是将spring的功能进行分装,类似于在用户和spring中间的一个接口,将spring的功能更人性化、更简单、更方便的提供给用户
webx则是完全依赖于spring,只不过通过用WebxContextLoader覆盖spring的ContextLoader,对spring的启动方式进行了一定的修改,在spring的基础上实现了pipeline及其他的一些功能。
spring boot是让spring变得更方便使用,webx是让spring变得更强大。
spring boot可以替使用者完成大多数的配置,要很好的使用spring boot还是得看它启动过程中调用的类来理解它的一些约定。
举个例子:

http://start.spring.io  或者  http://start.alibaba.net/  生成一个最简单的demo;
然后打开修改:
DemoApplication.java
@RestController
@SpringBootApplication
public class DemoApplication {
 
  public static void main(String[] args) {
    SpringApplication.run(DemoApplication.class, args);
  }
 
  @RequestMapping("/cipher")
  public String helloworld(){
    return "hello cipher";
  }
}
运行:然后就可以访问http://localhost:8080/hello 可以看到页面返回了hello cipher
 
这段代码有很多有用的信息,这里大致做一些介绍:
1. SpringApplication是Spring Boot框架中描述Spring应用的类, 它的run()方法会创建一个Spring应用上下文(Application Context)。另一方面它会扫描当前应用类路径上的依赖
2. Spring WebMvc框架会将 Servlet容器 里收到的HTTP请求根据路径分发给 对应的@Controller类进 行处理, @RestController是一类特殊的@Controller, 它的返回值直接作为HTTP Response的Body部分返回给浏览器。
3. @RequestMapping注解表明该方法处理那些URL对应的HTTP请求 ,也就是我们常说的URL路由(routing),请求的分发工作是有Spring完成的。例如上面的代码中http://localhost:8080/hello 路径就被路由至helloworld()方法进行处理
4. @SpringBootApplication 这个annotation 是spring boot提供的一个简便的annotation,有些开发人员喜欢用 @Configuration, @EnableAutoConfiguration和 @ComponentScan这三个,其实他们是一个意思
 
如何修改应用默认的配置?
从application.properties属性文件开始。
SpringApplication将从以下位置加载application.properties文件 ,并把它们添加到Spring Environment中:
1. 当前目录下的一个/config子目录 
2. 当前目录 
3. 一个classpath下的/config包 
4. classpath根路径(root)
如:修改端口
server . port = 7001
management . port = 7002
 
使用 @Controller 实现URL路由
现代Web应用往往包括很多页面,不同的页面也对应着不同的URL。对于不同的URL,通常需要不同的方法进行处理并返回不同的内容。
匹配多个URL
@RestController
public class Application {
@RequestMapping("/")
   
    public String index() {
       
        return "Index Page";
    }
    }
@RequestMapping("/hello")
   
    public String hello() {
       
        return "Hello World!";
    }
    }
}
 
@RequestMapping 可以注解 @Controller 类:
@RestController
@RequestMapping("/classPath")
public class Application {
   
    @RequestMapping("/methodPath")
   
    public String method() {
       
        return "mapping url is /classPath/methodPath";
    }
}
    }
}
method方法匹配的URL是/classPath/methodPath"。
 提示
可以定义多个 @Controller 将不同URL的处理方法分散在不同的类中

URL中的变量——PathVariable
在Web应用中URL通常不是一成不变的,
例如微博两个不同用户的个人主页对应两个不同的URL: http://weibo.com/user1, http://weibo.com/user2
我们不可能对于每一个用户都编写一个被@RequestMapping注解的方法来处理其请求,Spring MVC提供了一套机制来处理这种情况:
@RequestMapping("/users/{username}")
public String userProfile(@PathVariable("username") String username) {
   
    return String.format("user %s", username);
}
}
@RequestMapping("/posts/{id}")
public String post(@PathVariable("id") int id) {
   
    return String.format("post %d", id);
}
}
在上述例子中,URL中的变量可以用 {variableName} 来表示,同时在方法的参数中加上 @PathVariable("variableName")
那么当请求被转发给该方法处理时,对应的URL中的变量会被自动赋值给被@PathVariable注解的参数(能够自动根据参数类型赋值,例如上例中的int)。

支持HTTP方法
对于HTTP请求除了其URL,还需要注意它的方法(Method)。
例如我们在浏览器中访问一个页面通常是GET方法,而表单的提交一般是POST方法。@Controller中的方法同样需要对其进行区分:
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String loginGet() {
   
    return "Login Page";
}
}
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String loginPost() {
   
    return "Login Post Request";
}
}

模板渲染
在之前所有的 @RequestMapping 注解的方法中,返回值字符串都被直接传送到浏览器端并显示给用户。
但是为了能够呈现更加丰富、美观的页面,我们需要将HTML代码返回给浏览器,浏览器再进行页面的渲染、显示。
一种很直观的方法是在处理请求的方法中,直接返回HTML代码,但是这样做的问题在于——一个复杂的页面HTML代码往往也非常复杂,并且嵌入在Java代码中十分不利于维护。更好的做法是将页面的HTML代码写在模板文件中,渲染后再返回给用户。为了能够进行模板渲染,需要将@RestController改成@Controller
import org.springframework.ui.Model;
@Controller
public class HelloController {
@RequestMapping("/hello/{name}")
   
    public String hello(@PathVariable("name") String name, Model model) {
        model.addAttribute(
        model.addAttribute("name", name);
       
        return "hello"
    }
}

在上述例子中,返回值 "hello" 并非直接将字符串返回给浏览器,而是寻找名字为 hello 的模板进行渲染
我们使用Thymeleaf模板引擎进行模板渲染,需要引入依赖:
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
接下来需要在默认的模板文件 src/main/resources/templates/ 目录下添加一个模板文件 hello.html
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Getting Started: Serving Web Content</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
    <p th:text="'Hello, ' + ${name} + '!'" />
</body>
</html>
th:text="'Hello, ' + ${name} + '!'" 也就是将我们之前在 @Controller 方法里添加至 Model 的属性 name 进行渲染,并放入 <p> 标签中(因为 th:text <p> 标签的属性)。模板渲染还有更多的用法,请参考 Thymeleaf官方文档

处理静态文件
浏览器页面使用HTML作为描述语言,那么必然也脱离不了CSS以及JavaScript。为了能够浏览器能够正确加载类似/css/style.css/js/main.js等资源,默认情况下我们只需要在src/main/resources/static目录下添加css/style.cssjs/main.js文件后,Spring MVC能够自动将他们发布,通过访问/css/style.css/js/main.js也就可以正确加载这些资源。
 

Spring bean和依赖注入
        @configuration 相当于xml配置文件 
        @RestController Spring新加入的声明Controller的注解
        @component@service @Repository 声明bean
        @autowired  @Qualifier 注入bean

    Spring boot注解
          @SpringBootApplication = @Configuration @EnableAutoConfiguration  @ComponentScan
          @Import @ImportResource 导入配置文件
          @Configuration 声明配置类
          @RestController 实现一个RESTful web services
          @Component , @Service , @Repository , @Controller 声明bean
          @autowired  @Qualifier 注入
          @Aspect等等支持AOP
          @RequestMapping 注解地址映射,url pattern

      endpoint、监控:
            执行器endpoint允许你监控应用及与应用进行交互。
        Spring Boot包含很多内置的endpoint,我们也可以添加自己的。
         

        Cache:
              Spring boot支持显示的在应用中加入缓存,我们可以为方法添加缓存以提升效率。支持的缓存有:Generic、EhCache 2.x、Hazelcast、Infinispan、JCache (JSR107)、Redis、Guava、Simple等几种方式。

          • 0
            点赞
          • 1
            收藏
            觉得还不错? 一键收藏
          • 0
            评论

          “相关推荐”对你有帮助么?

          • 非常没帮助
          • 没帮助
          • 一般
          • 有帮助
          • 非常有帮助
          提交
          评论
          添加红包

          请填写红包祝福语或标题

          红包个数最小为10个

          红包金额最低5元

          当前余额3.43前往充值 >
          需支付:10.00
          成就一亿技术人!
          领取后你会自动成为博主和红包主的粉丝 规则
          hope_wisdom
          发出的红包
          实付
          使用余额支付
          点击重新获取
          扫码支付
          钱包余额 0

          抵扣说明:

          1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
          2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

          余额充值