Spring Boot实战

Chapter6.Spring Boot核心

@SpringBootApplication是个结合评释,源码如下:

?

1
2
3
4
5
6
7
8
9
10
11
12
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
)}
)

Spring Boot的安顿文件

Spring
Boot使用一个大局的配置文件application.properties或application.yml,放置在/src/main/resources目录或者类路径下的/config下。那之中的安插不行多,参见官方给出的附录。例如:

?

1
2
3
4
//将tomcat默认端口号8080改为9090,并将默认的访问路径"/"
//修改为"//hellohost"
server.port=9090
server.context-path=/hellohost

常规属性配置

俺们事先讲过在健康Spring环境下,注入properites文件里的值的章程,通过@PropertySource指明properties文件的地点,然后经过@Value注入值。在Spring
Boot里,大家只需在application.properties中定义属性,然后利用@Value注入即可。

品类安全的布局(基于properties)

上例中运用@Value注入每个配置在事实上项目中会显得很辛劳,因为要写@Value注入很频仍啊。

下边是一个进化版,可以通过@ConfigurationProperties将properties属性和一个Bean及其性质关联,从而落成项目安全的布局。例如:在application.properties上助长:

?

1
2
author.name =zeng
author.age = 24

当然也足以新建一个properties文件,这就需求大家在@ConfigurationProperties的品质locations里面指定properties的任务,且须要在入口类上安排。

品种安全的Bean:

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@Component
@ConfigurationProperties(prefix = "author") //1
public class AuthorSettings {
    private String name;
    private Long age;
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public Long getAge() {
        return age;
    }
 
    public void setAge(Long age) {
        this.age = age;
    }
}

通过prefix指虞诩顿的前缀,通过locations制定文件的岗位。比如:

?

1
@ConfigurationProperties(prefix = "author",locations={"classpath:config/author.properties"})

日记配置

默许情形下,Spring Boot使用Logback作为日志框架。

?

1
2
3
4
5
6
7
8
9
10
# LOGGING
logging.config= # Location of the logging configuration file. For instance `classpath:logback.xml` for Logback
logging.exception-conversion-word=%wEx # Conversion word used when logging exceptions.
logging.file= # Log file name. For instance `myapp.log`
logging.level.*= # Log levels severity mapping. For instance `logging.level.org.springframework=DEBUG`
logging.path= # Location of the log file. For instance `/var/log`
logging.pattern.console= # Appender pattern for output to the console. Only supported with the default logback setup.
logging.pattern.file= # Appender pattern for output to the file. Only supported with the default logback setup.
logging.pattern.level= # Appender pattern for log level (default %5p). Only supported with the default logback setup.
logging.register-shutdown-hook=false # Register a shutdown hook for the logging system when it is initialized.

Spring Boot运行规律

在前头大家驾驭到Spring 4.x提供了基于条件来安插Bean的能力,其实Spring
Boot的神奇的兑现也是按照这一法则的。

至于Spring
Boot的运行规律,依旧要回归到@SpringBootApplication注解上来,这几个阐明是一个结缘声明,前面早已演示过了,它的为主职能是由@EnableAutoConfiguration声明来提供的。

Spring每个版本的脱离都以收缩配置作为友好的重大目标,例如:

vc-4x”>第二部分.点睛Spring MVC 4.x

分清MVC和三层架构的差别:

MVC:Model+View+Controller(数据模型+视图+控制器)

三层架构:Presentation tier+Application tier+Data
tier(突显层+应用层+数据访问层)

骨子里的MVC只设有三层架构中的突显层,M实际上是数据模型,是富含数据的靶子。在Spring
MVC中,有一个特意的类叫Model,用来和V之间的数额交互、传值;V指的是视图页面,包含JSP,Thymeleaf等。C当然就是控制器(Spring
MVC的注释@Controller类)。

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//Spring MVC配置
@Configuration
@EnableWebMvc
@EnableScheduling
@ComponentScan("com.wisely.highlight_springmvc4")
public class MyMvcConfig extends WebMvcConfigurerAdapter {
 
    @Bean
    public InternalResourceViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix("/WEB-INF/classes/views/");
        viewResolver.setSuffix(".jsp");
        viewResolver.setViewClass(JstlView.class);
        return viewResolver;
    }
}

瞩目这里对路线前缀的安顿为/WEB-INF/classes/views/,不是和大家的支出的目录一样。因为看到的页面效果是运行时而不是开发时的代码,运行时代码会将大家的页面自动编写到/WEB-INF/classes/views/(因为我把JSP文件放在了/resources/views目录下)下。

?

1
2
3
4
5
6
7
8
9
10
@Controller
public class HelloController {
 
    @RequestMapping("/index")
    public  String hello(){
 
        return "index";
    }
 
}

由此地点的ViewResolver的Bean配置,重返值为index,说明大家的页面放置的路径为/WEB-INF/classes/views/index.jsp。

Spring MVC的常用申明

1.@Controller
2.@RequestMapping
3.@RequestBody
@RequestBody允许request的参数在request体中,而不是在直接链接在地点前边。
4.@ResponseBody
@ResponseBody辅助将重返值放在response体内,而不是回去一个页面。
5.@PathVariable
6.@RestController
是一个整合注脚,组合了@Controller和@ReponseBody。

示例:
添加jackson即有关器重,得到对象和json或xml之间的转速。

专门提议:在其实项目中,大家紧要支撑json数据,没必要同时协助json和xml,因为json比xml更简洁,而且也更推荐。

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class DemoObj {
    private Long id;
    private String name;
 
    //jackson对对象和json做转换时一定需要此空构造
    public DemoObj() {
        super();
    }
    public DemoObj(Long id, String name) {
        super();
        this.id = id;
        this.name = name;
    }
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
 
 
 
}

演示@Controller控制器:

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
@Controller // 1
@RequestMapping("/anno") //2
public class DemoAnnoController {
 
    @RequestMapping(produces = "text/plain;charset=UTF-8"// 3
    public @ResponseBody String index(HttpServletRequest request) { // 4
        return "url:" + request.getRequestURL() + " can access";
    }
 
    @RequestMapping(value = "/pathvar/{str}", produces = "text/plain;charset=UTF-8")// 5
    public @ResponseBody String demoPathVar(@PathVariable String str, //3
            HttpServletRequest request) {
        return "url:" + request.getRequestURL() + " can access,str: " + str;
    }
 
    @RequestMapping(value = "/requestParam", produces = "text/plain;charset=UTF-8")
    //6演示常规的request参数获取,访问路径
    //为/anno/requestParam?id=1
    public @ResponseBody String passRequestParam(Long id,
            HttpServletRequest request) {
 
        return "url:" + request.getRequestURL() + " can access,id: " + id;
 
    }
 
    @RequestMapping(value = "/obj", produces = "application/json;charset=UTF-8")
    //演示解释参数到对象,访问路径为/anno/obj?id=1&name=xx
    @ResponseBody //8
    public String passObj(DemoObj obj, HttpServletRequest request) {
 
         return "url:" + request.getRequestURL()
                    + " can access, obj id: " + obj.getId()+" obj name:" + obj.getName();
 
    }
 
    @RequestMapping(value = { "/name1", "/name2" }, produces = "text/plain;charset=UTF-8")//9
    public @ResponseBody String remove(HttpServletRequest request) {
 
        return "url:" + request.getRequestURL() + " can access";
    }
 
}

演示@RestController控制器:

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@RestController //1
@RequestMapping("/rest")
public class DemoRestController {
 
    @RequestMapping(value = "/getjson",
            produces={"application/json;charset=UTF-8"}) //2
    public DemoObj getjson (DemoObj obj){
    //直接返回对象,对象会自动转换称json
        return new DemoObj(obj.getId()+1, obj.getName()+"yy");
    }
    @RequestMapping(value = "/getxml",
            produces={"application/xml;charset=UTF-8"})//4返回数据的媒体类型为xml
    public DemoObj getxml(DemoObj obj){
        return new DemoObj(obj.getId()+1, obj.getName()+"yy");
    }
 
}

Spring MVC的骨干配备

Spring
MVC的定制配置必要我们的配置类继承一个WebMvcConfigure艾达pter类,并在此类使用@EnableWebMvc注明,来拉开对Spring
MVC的安插援助,那样我们就足以重写那几个类的不二法门,已毕大家的常用配置。

静态资源映射

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
@Configuration
//1开启Spring MVC支持,若无此句,重写
//WebMvcConfigurerAdapter方法无效
@EnableWebMvc
@EnableScheduling
@ComponentScan("com.wisely.highlight_springmvc4")
public class MyMvcConfig extends WebMvcConfigurerAdapter {// 2重写方法进行配置
 
    @Bean
    public InternalResourceViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix("/WEB-INF/classes/views/");
        viewResolver.setSuffix(".jsp");
        viewResolver.setViewClass(JstlView.class);
        return viewResolver;
    }
 
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
 
 
//addResourceLocations指的是文件放置的目录,
//addResourceHandler指的是对外暴露的访问路径
registry.addResourceHandler("/assets/**").addResourceLocations(
                "classpath:/assets/");
 
    }
}

快捷的ViewController
我们在计划页面转向的时候使用上面的代码:

?

1
2
3
4
@RequestMapping("/index")
public Stirng hello(){
return "hello";
}

若是只是但是的转化,没有其余的工作逻辑的话,那样写很费力,大家得以由此重写addViewControllers来简化配置:

?

1
2
3
4
@override
public void addViewControllers(ViewControllerRegistry registry){
registry.addViewController("/index").setViewName("index")
}

文件上传配置:

在Spring的控制器中,通过MultipartFile
file来选取文件,通过MultipartFile[] files接收三个文本上传。

劳务器端推送技术

服务器推送技术在日常生活中比较常用,很五个人前期的方案是应用Ajax向服务器轮询音讯,那种办法的轮询频率糟糕控制,所以大大增加了服务器的压力。

本节的劳务器端推送方案都是根据:当客户端向服务端发送请求,服务端会抓住那个请求不放,等有多少更新的时候才回来给客户端,当客户端接收到新闻后,再向服务端发送请求,周而复始。那种方法的利益是大大缩小了服务器的哀求数量,大大收缩了服务器的压力

Spring MVC的测试

为了测试Web项目一般不须求启动项目,大家需求部分Servlet相关的模仿目的。比如:MockMVC,MockHttpServletRequest,MockHttpServletResponse,MockHttpSession等。

测试驱动开发(TDD)

咱俩按照须求先写一个自己预想结果的测试用例,这些测试用例刚初步肯定是败退的测试,随着不断的编码和重构,最终让测试用例通过测试。那样才能保障软件的品质和可控性。

咱俩器重依靠的是JUnit来进展测试。
示范测试:

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {MyMvcConfig.class})
@WebAppConfiguration("src/main/resources") //1
public class TestControllerIntegrationTests {
    private MockMvc mockMvc; //2
 
    @Autowired
    private DemoService demoService;//3
 
    @Autowired
    WebApplicationContext wac; //4
 
    @Autowired
    MockHttpSession session; //5
 
    @Autowired
    MockHttpServletRequest request; //6
 
    @Before //7在测试开始前进行的初始化工作
    public void setup() {
        mockMvc =
                MockMvcBuilders.webAppContextSetup(this.wac).build(); //2
        }
 
    @Test
    public void testNormalController() throws Exception{
        mockMvc.perform(get("/normal")) //8
                .andExpect(status().isOk())//9
                .andExpect(view().name("page"))//10
                .andExpect(forwardedUrl("/WEB-INF/classes/views/page.jsp"))//11
                .andExpect(model().attribute("msg", demoService.saySomething()));//12
 
    }
 
    @Test
    public void testRestController() throws Exception{
        mockMvc.perform(get("/testRest")) //13
        .andExpect(status().isOk())
         .andExpect(content().contentType("text/plain;charset=UTF-8"))//14
        .andExpect(content().string(demoService.saySomething()));//15
    }
 
}

Spring在java
EE开发中是实际意义上的正式,但我们在付出Spring的时候可能会碰着以下令人胃疼的难点:

Chapter5.Spring基础

Spring Boot:
它利用”习惯优于配备”(项目中存在大气的布局,别的还内置一个习惯性的布署,让你不用手动进行配置)的看法让你的门类飞速运行起来。使用Spring
Boot很不难创制一个单独运行(运行jar,内嵌servlet容器),准生育级其他予以Spring框架的体系,使用Spring
Boot你可以不要或者只需很少的Spring配置。

Spring Boot主旨功能:

1.单独运作的Spring项目

2.内嵌Servlet容器

3.提供starter简化Maven配置
以此真的很方便,不用自己手动添加很多看重

4.自动配置Spring
Spring
Boot会依据在类路径中的jar包,类,为jar包里的类活动配置bean,这样会大幅度地回落大家要拔取的布置
。当然,Sping
Boot只是考虑了一大半的费用意况,并不是独具的场景,若在事实上中要求活动配置Bean,而Spring
Boot没有提供接济,那么可以自定义自动配置。(见Spring运行规律)

5.准生产的行使监控
Spring提供依照http,ssh,telnet对运行时的花色进展督察

6.无代码生成和xml配置
Spring 4.x提倡使用java配置和注释配置结合,而Spring
Boot不需求其余xml配置即可兑现Spring的持有配置。

一个小技巧
在英特尔iJ IDEA中创制Spring项目时,选取新建Spring
Initializer项目,可以拉长各个starter,然后会在maven中机动抬高爱惜,很便利。

@SpringBootApplication是Spring
Boot项目的骨干注明,首要目标是敞开自动配置

1.坚守“习惯优于配备”的尺度,使用Spring
Boot只须求很少的配备。半数以上足以动用默许配置。
2.体系火速搭建,可无配置结合第三方框架。
3.可完全不选用xml配置,只利用自行配置java config
4.内嵌servlet容器,应用可用jar包运行。
5.运行中应用状态的监察。

Chapter2.Spring常用配置

Scope描述的是Spring容器如何新建Bean的实例的。有以下二种,通过@Scope注明来兑现:

1.Singleton:一个Spring容器中唯有一个Bean的实例,此为Spring的默许配置,全容器共享一个实例
2.Prototype:每一次调用新建一个Bean的实例。
3.Request:Web项目中,给每一个http request新建一个Bean实例。
4.Session:Web项目中,给每一个http session新建一个Bean实例。

Spring
EL-Spring表明式语言,协助在xml和注释中使用表达式,类似于JSP的EL表明式语言。

示例:

?

1
2
3
4
5
6
7
8
9
//注入普通字符串
@Value("I Love You!") //1
private String normal;
//注入操作系统属性
@Value("#{systemProperties['os.name']}") //2
private String osName;
//注入表达式结果
@Value("#{ T(java.lang.Math).random() * 100.0 }") //3
private double randomNumber;

在其实支出的时候,平常会遇见Bean在行使应用以前依然往后做些要求的操作。在动用java配置和注释配置下提供了之类三种方法:

1.java陈设方式:使用@Bean的initMethoddestroyMethod
2.申明格局:利用JSR-250的@PostConstruct@PreDestroy

Spring的事件(Application
Event)
为Bean与Bean之间的新闻通讯提供了帮助。当一个Bean处理完一个义务之后,希望此外一个Bean知道并能做相应的处理,那时大家就必要让另一个Bean监听当前Bean说发送的轩然大波。

Spring的风浪须要依照如下流程:

1.自定义事件,继承Application伊夫nt
2.概念事件监听器,已毕ApplicationListener
3.利用容器发表事件

切切实实事例看书源码即可。

Chapter1.Spring基础

Spring的简史:

1.xml配置

在Spring
1.x一时,使用Spring开发满眼都是xml配置的Bean,随着项目标壮大,我们需求xml配置文件分放到分歧的安顿文件里,那时候必要频仍地在付出的类和陈设文件中切换。

2.诠释配置

在Spring 2.x时日,随着JDK
1.5带来的笺注扶助,Spring提供了注明Bean的笺注(如@Component,@Service),大大减弱了配置量。那时Spring圈子里设有着一种冲突:表明配置和xml配置究竟哪位好?俺们最后的抉择是应用的中坚配备(如数据库配置)用xml,业务布局用评释

3.java配置

Spring3.x到今天,Spring提供了java配置的力量,使用java配置可以让你更驾驭您布署的Bean。大家脚下恰好处于这一个时期,Spring
4.x和Spring Boot都推荐应用java配置,所以大家在本书通篇将动用java配置。

Spring使用不难的POJO(plain old java
object,即无别的限制的常见java对象)来进展公司化开发,每一个被Spring管理的java对象都称呼Bean
。而Spring提供了一个IoC容器用来初步化对象,解决对象间的看重管理和对象的使用。

Spring的生态:

1.Spring Boot:使用默许支出配置来促成连忙支付
2.Spring Data:对主流的关系型和NoSQL数据库的支撑
3.Spring Security:通过验证和授权保养利用
4.Spring Web Flow:基于Spring MVC提供根据向导流程式的Web应用开发
5.Spring Web Services:提供了基于协议有限的SOAP/Web服务
6.Spring Session:提供一个API及贯彻来治本用户会话音信
等等,还有不少。

Spring框架本身有四大条件

1.应用POJO举行轻量级和纤维侵入式开发
2.由此珍惜注入和根据接口编程贯彻松耦合
3.透过AOP和默许习惯举办表明式编程
4.经过AOP和模板(template)减弱模块化代码

我们日常说的操纵翻转(inversion of control-IOC)和依靠注入(dependency
injection-DI)在Spring环境下是等同的定义,控制翻转是透过着重注入已毕的。所谓的依靠注入指的是容器负责创立对象和掩护对象间的看重关系,而不是通过对象自我友好的创始和解决自己的借助。比如典型的:

?

1
2
@Autowired
MyBean bean;

而不是温馨new出一个目标

声明Bean的注解:

1.@Component组件,没有确定性的角色
2.Service在作业逻辑层(service层)使用
3.@Repository在数额访问层(dao层)使用
4.@Controller在展现层(MVC->Spring MVC)使用

注入Bean的注解:

1.@Autowired,Spring提供的笺注(推荐使用)
2.@Inject,JSR-330提供
3.@Resource,JSR-250提供

流入Bean的注解可以申明在set方法上照旧性质上,然而最好是在性质上,优点是代码更少,层次更显明。

@Configuration评释当前类是一个配置类。

应用@ComponentScan,自动扫描包名下所有应用@Service,@Component,@Compository,@Controller的类,并注册为Bean。

java配置是透过@Configuation和@Bean来贯彻的。

@Configuration声称当前类时一个布署类,相当于一个Spring配置的xml文件。
@Bean诠释在艺术上,表明当前格局的重回值为一个Bean。

哪天使用java配置或者注脚配置呢?
大家的标准是:大局配置使用java配置(如数据库相关配置,MVC相关配置),业务Bean的布署利用评释配置

AOP:面向切面编程,相对于OOP面向对象编程

Spring的AOP的留存的目标是为着解耦。AOP可以让一组类共享相同的行为。在OOP中只可以由此继承类和落实接口,来使代码的耦合度增强,且类继承只好为单继承,阻碍越多表现添加到一组类上,AOP弥补了OOP的不足。

注解声明本身是尚未效应的,就和xml一样。注解和xml都是一种元数据,元数据即解释多少的数目,那就是所谓的布置。

其三部分.实战Spring Boot

即使Spring Boot给大家带来了近乎于脚本语言开发的作用,但Spring
Boot里从未使用什么让你不意的技能,一齐是一个唯有的基于Spring的选择如,Spring
Boot的自行配置是透过Spring 4.x 的@Conditional注脚来完结的

首先部分.点睛Spring 4.x

Chapter8.Spring Boot的多少访问

Spring
Data为大家应用统一的API来对广大数码存储技术(比如关系性和非关系型数据库)举办数量访问操作提供了支撑。那是Spring通过提供Spring
Data Commons项目来促成的,它是上述各类Spring Data项目标依靠。Spring Data
康芒斯让我们在动用关系型或非关系型数据访问技术时都应用基于Spring的统一标准,该专业包蕴CURD(创造,获取,更新,删除),查询,排序和分页的相关操作。

Chapter7.Spring Boot的Web开发

Spring
Boot提供了spring-boot-starter-web为Web开发予以支持,spring-boot-starter-web为大家提供了放置的汤姆cat以及Spring
MVC的信赖。而Web相关的机动配置存储在org.springframework.web下。从这几个文件名可以观察:

1.ServerPropertiesAutoConfiguration和ServerPropertes自动配置内嵌的Servlet容器

2.HttpEncodingAutoConfiguration和HttpEncodingProperties用来机关配置http的编码

3.MultipartAutoConfiguration和MultipartProperties用来自机关配置上传文件的特性

4.杰克逊HttpMessageConvertersConfiguration用来机关配置mapping杰克逊2HttpMessageConverter和mapping杰克逊2XmlHttpMessageConverter。

5.WebMvcAutoConfiguration和WebMvcProperties配置Spring MVC。

Thymeleaf与Spring MVC的集成

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@Bean
public TemplateResolver templateResovler(){
    TemplateResovler templateResovler = new ServletContextTemplateResovler();
    templateResovler.setPrefix("/WEB-INF/templates");
    templateResovler.setSuffix(".html");
    templateResovler.setTemplateMode("HTML5");
    return templateResovler;
}
 
@Bean
public SpringTemplateEngine templateEngine(){
    SpringTemplateEngine templateEngine = new SpringTemplateEngine();
    templateEngine.setTemplateResovler(templateResovler());
    return templateEngine;
}
 
@Bean
public ThymeleafViewResovler thymeleafVewResolver(){
    ThymeleafViewResolver thymeleafVewResolver = new ThymeleafViewResovler();
    ThymeleafViewResovler.setTemplateEngine(templateEngine());
    return ThymeleafViewResovler;
}

在Spring
MVC中即便有发动机,让配置变得不那么勤奋,但要么太繁琐了哟。看看Spring
Boot吧。

Thymeleaf与Spring Boot的集成

上有些的全方位布置在Spring Boot中一切都是不需求的。Spring
Boot通过org.springframework.boot.autoconfigure.thymeleaf包对Thymeleaf举办了自动配置。我们只需求在application.properties中开展恰当的配备即可:

?

1
2
3
4
5
6
7
8
9
10
11
12
13
# THYMELEAF (ThymeleafAutoConfiguration)
spring.thymeleaf.cache=true # Enable template caching.
spring.thymeleaf.check-template=true # Check that the template exists before rendering it.
spring.thymeleaf.check-template-location=true # Check that the templates location exists.
spring.thymeleaf.content-type=text/html # Content-Type value.
spring.thymeleaf.enabled=true # Enable MVC Thymeleaf view resolution.
spring.thymeleaf.encoding=UTF-8 # Template encoding.
spring.thymeleaf.excluded-view-names= # Comma-separated list of view names that should be excluded from resolution.
spring.thymeleaf.mode=HTML5 # Template mode to be applied to templates. See also StandardTemplateModeHandlers.
spring.thymeleaf.prefix=classpath:/templates/ # Prefix that gets prepended to view names when building a URL.
spring.thymeleaf.suffix=.html # Suffix that gets appended to view names when building a URL.
spring.thymeleaf.template-resolver-order= # Order of the template resolver in the chain.
spring.thymeleaf.view-names= # Comma-separated list of view names that can be resolved.

接管Spring Boot的Web配置

突出读读上边两段话

只要Spring Boot提供的Spring
MVC默认配置不相符您的急需,则足以因而一个配置类(评释有@Configuration)加上@EnableWebMvc注明来落到实处完全自己说了算的MVC配置。那种景况,那种办法不引进

本来,在一般状态下,Spring
Boot的自发性配置是切合大家半数以上必要的。在您既须要保留Spring
Boot提供的造福,又要求充实和谐的额外的配备的时候,可以定义一个计划类并连续WebMvcConfigurerAdapter,无须使用@EnableWebMvc申明。然后依据第4章讲的Spring
MVC的配备情势来添加Spring Boot为大家所做的任何安排

关键点是:可以通过Spring MVC的安顿格局来安插Spring Boot。

?

1
2
3
4
5
6
7
8
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter{
 
@override
public void addViewControllers(ViewControllerRegistry registry){
    registry.addViewController("/xx").addViewName("xx");
}
}

值得提议的是:在此地重写的addViewController方法,并不会覆盖WebMvcAutoConfiguration中的addViewControllers(在源码中,默许的有一个安插,Spring
Boot将”/”映射到index.html),那也就表示大家的布置和Spring
Boot的机动配置同时有效,那也是我们推荐添加自己的MVC配置的点子

WebSocket

WebSocket为浏览器和服务端提供了双工异步通讯的法力,即浏览器可以向服务端发送音讯,服务端也得以向浏览器发送音信

WebSocket是经过一个socket来落到实处双工异步通信能力的。可是一贯行使WebSocket协议会显得相当繁琐,我们会利用它的子协议STOMP,它是一个更高级其他说道,STOMP协议利用一个基于帧(frame)的格式来定义音信,与HTTP的request和response类似(具有类似于@RequestMapping的@MessageMapping)。

1.广播式
广播式即服务端有音信时,会将新闻发送给所有连接了当前endpoint的浏览器。

2.点对点式
广播式有协调的运用场景,不过广播式无法化解咱们一个广泛的气象,即新闻由哪个人发送,由什么人收到的题材。

基于Bootstrap和AngularJS的现代Web应用

现代的B/S系统有下边多少个特征:

1.单页面应用

单页面应用(single-page
application,简称SPA)值的是一种恍若于原生客户端软件的更通畅的用户体验页面。

在单页面的采纳中,所有的资源(HTML,JavaScript,CSS)都是按需动态加载到页面上的,且不要求服务端控制页面的中转

2.响应式设计

响应式设计(Responsive web
design,简称RWD)指的是不一致的装备访问同一的页面的时候,获得区其他页面视图,而获取的视图是适应当前屏幕的。

3.数码导向

数量导向是对此页面导向而言的,页面上的多寡得到是透过消费后台的REST服务来落到实处的,而不是因而服务器渲染的动态界面(如JSP)来促成的,一般数据互换使用的格式是JSON

AngularJS

HTML一般是用来表明静态页面的,可是普通状态下大家意在页面是基于数据动态变化的,那也是我们很多劳动器端模板引擎出现的由来,而AngularJS可以只透过前端技术就落到实处动态的页面

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@RestController
@SpringBootApplication
public class Ch77Application {
 
    @RequestMapping(value="/search",produces={MediaType.APPLICATION_JSON_VALUE})
    public Person search(String personName){
 
        return new Person(personName, 32, "hefei");
 
    }
 
    public static void main(String[] args) {
        SpringApplication.run(Ch77Application.class, args);
    }
}

地点的代码大家模拟一个询问,即接到前台传入的personName,然后回来Person类,因为我们接纳的是@RestController,且重临值类型是Person,所以Spring
MVC会自动将对象输出为JSON。注意代码中的:

?

1
produces={MediaType.APPLICATION_JSON_VALUE}

1.生产@Component,@Service,@Repository,@Controller声明在类上注脚Bean
2.生产@Configuration,@Bean的java配置来取代xml配置。

1.气势恢宏配置文件的定义。
2.与第三方软件整合的技巧难题。

Chapter3.Spring高级话题

Spring的信赖性注入的最大亮点就是你持有的Bean对容器Spring容器的留存是尚未发觉的。即你可以将你的器皿替换成其余器皿。

但在其实项目中,不可幸免要用到Spring容器本身的功用资源,那时你的Bean必要求发现到Spring容器的留存,才能调用Spring说提供的资源,那就是所谓的Spring
Aware。其实,Spring
Aware
本来就是Spring设计用来框架之中选用的,若选拔了Spring
Aware,你的Bean将会和Spring框架耦合。

Spring Aware的目标是为着让Bean得到Spring容器的服务

多线程

Spring通过义务执行器(TaskExecutor)来促成三十二线程和出现编程。使用ThreadPoolTaskExecutor可完毕一个基于线程池的TaskExecutor。而实在支出中义务一般是非阻碍的,即异步的,所以大家要在配置类中经过@EnableAsync开启对异步职务的辅助。并通过在事实上施行的Bean方法中应用@Async申明来声称其是一个异步职务。

安排任务

安插职务在Spring中的已毕变得那几个的大约。首先通过在陈设类声明@EnableScheduling来开启对安插职务的协助,然后在要举行任务的方法上诠释@Scheduled,申明那是一个安顿职务。

Spring通过@Scheduled援救三种类型的安顿职务,包蕴cron,fixDeley,fixedRate等。例如:

?

1
2
3
4
//每个5秒执行一次
@Scheduled(fixedRate=5000)
//UNIX或LINUX系统下的定时任务
@Scheduled(cron="0 28 11 ? * *")

组成表明和元申明

诠释的大气应用,越发相同的三个注明用到各样类或方法中,会一定繁琐。那就是所谓的规范代码,是Spring设计条件中要排除的代码。

所谓元注解实则就是足以表明到其他表明上的注明,被诠释的笺注称之为构成申明

@Enable*注解

通过寓目@Enable*注解的源码,大家发现装有的诠释都有一个@Import声明,@Import是用来导入配置类的,那也就意味着那些电动开启的完结其实是导入了一部分机动配置的Bean。这几个导入的布署紧要分为三种档次:

1.一向导入配置类
2.基于调价选取配置类
3.动态注册Bean

Spring Boot具有以下特征:

相关文章