spring in action 5学习笔记(一)

spring in action5按目录有五部分,每个部分又分若干小节,准备按每个小节为一篇做笔记

PART1 Foundation Spring----------1 get started with spring

1.1 spring是什么

概念

大型应用由许多组件组成,各负其责,协作分工,程序运行时,这些组件被创建,互相引用管理生命周期。

spring提供一个容器,也叫应用上下文,负责创建和管理app组件,这些组件或者beans被装配在容器中,联结在一起形成一个完整的app.

把beans装配在一起的行为基于依赖注入模式,不使用spring时,组件或者beans的生命周期由别的组件创建和管理,使用spring后,全部由容器创建和管理,包括注入bean,注入bean的方式由构造函数和属性访问方法。

总结:使用spring框架和不使用的不同点在于组件的创建和管理方式,spring统一使用容器管理,组件调用的行为通过注入bean实现,注入bean的方式通常使用2种

关键字 容器 应用上下文 装配 依赖注入 组件或者bean

装配方式,过去使用xml描述bean和注入bean,现在版本的spring中,使用称为 a java-based configuration

<bean id="inventoryService"
class="com.example.InventoryService" />
<bean id="productService"
class="com.example.ProductService" />
<constructor-arg ref="inventoryService" />
</bean>
@Configuration
public class ServiceConfiguration {
@Bean
public InventoryService inventoryService() {
return new InventoryService();
}
@Bean
public ProductService productService() {
return new ProductService(inventoryService());
}
}

@Configuration告诉spring这是个配置类,作用是提供beans给spring应用上下文
@Bean表示方法返回的对象将作为beans放入应用上下文中

使用配置类不使用xml的好处:类型安全,利于重构,只有在必要情况下才使用java配置类或者xml,因为spring通常自动配置组件

自动配置技术

  • 自动配置技术源于自动装配和组件扫描
    • 组件扫描能够利用类路径发现组件并且在应用上下文中创建他们
    • 自动装配能够自动注入依赖的bean

自动配置技术的代表:spring boot,spring boot大量减少了显式配置的数量

1.2初始化一个spring app

方式

  • 使用 web http://start.spring.io
  • 使用命令行:curl
  • 使用spring boot 命令行界面
  • 使用spring tool suite
  • 使用idea
  • 使用netbeans
    ###书中推荐使用spring tool suite
  1. 创建项目
  2. 项目结构解析
    • mvnw and mvnw.cmd:Maven的包装脚本,用来构建项目
    • pom.xml:Maven配置文件
    • TacoCloudApplication.java:两个注解的意思
    • application.properties:项目配置文件,作为注入bean的快捷配置存在
    • static 存放静态内容(图片,样式、脚本等)
    • templates:存放模板文件
    • TacoCloudApplicationTests.java:测试类
  3. 测试类
package tacos;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class TacoCloudApplicationTests {
@Test
public void contextLoads() {
}
}

注解@RunWith(SpringRunner.class),这是一个JUnit注解,提供一个测试运行器,用来创建应用上下文,这个注解名是SpringJUnit4ClassRunner的别名

@SpringBootTest表示使用spring引导功能引导测试

空方法用来提示注解工作

1.3写一个应用

使用模板定义页面,使用控制器处理请求

处理请求

  1. 控制器响应请求,并把模型数据和请求转发给视图,然后生成html字符串给浏览器
@Controller
public class HomeController {

    @GetMapping("/")
    public String home() {
        return "home";
    }
}

@Controller使类能够被组件自动扫描发现,并在应用上下文创建实例,包括@Component,@Service,@Repository都和@Controller一样作用,换用也可

@GetMapping表示http get请求,路径为/,home()方法处理此请求

返回值为字符串,表示为一个视图的逻辑名,此demo引入了Thymeleaf,所以视图为同名模板,放在/templates/home.html

  1. 定义视图模板,用来渲染视图
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" 
      xmlns:th="http://www.thymeleaf.org">
  <head>
    <title>Taco Cloud</title>
  </head>
  
  <body>
    <h1>Welcome to...</h1>
    <img th:src="@{/images/TacoCloud.png}"/>
  </body>
</html>
  1. 测试控制器,理解注解
package tacos.controller;

import static org.hamcrest.Matchers.containsString;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;

@RunWith(SpringRunner.class)
@WebMvcTest(HomeController.class)
public class HomeControllerTest {

    @Autowired
    private MockMvc mockMvc;
    @Test
    public void testHomePage() throws Exception {

        mockMvc.perform(get("/"))
                .andExpect(status().isOk())
                .andExpect(view().name("home")) 
                .andExpect(content().string(
                        containsString("welcome to ...")
                ));
    }
}

使用@WebMvcTest而不是@SpringBootTest:@WebMvcTest专门用来在spring mvc应用中进行测试

  1. 构建、运行应用
    书上用的是spring tool suite,这里用的是idea
    springboot应用不需要部署到应用服务器,tomcat已经被嵌入了,当在pom.xml中引入web后就嵌入了tomcat
  2. DevTools的好处:方便开发
    1. 代码改变,应用自动重启

    原理:使用DevTools后,应用被2个独立的类加载器加载,一个放java code,property files,src/main下的,一个放依赖库,当由改变时,DevTools重载前一个和重启应用上下文,另一个不动
    缺点:因为不重载依赖库,所以当改变依赖库时,还要手动重启应用

    1. 自动刷新浏览器

    需要浏览器插件支持,如LiveReload

    1. 自动关闭模板缓存
    2. 内建h2数据库的控制台

1.4Spring相关技术

the core Spring Framework是spring的基础,包括

  • 核心容器和依赖注入框架
  • spring web 框架:Spring MVC
  • 数据持久性支持:template-based JDBC
  • 支持响应式:spring webflux:spring mvc的变种

spring boot,优点太多

  • 起步依赖
  • 自动配置
  • 内置监控,Actuator

spring data

  • 核心框架提供的是基本的数据持久性支持,spring data更加强大

spring security

  • 重量级安全框架,包括认证 授权 api安全

spring integration and spring batch

  • 与其他应用相关集成等问题

spring cloud

  • 用来做微服务开发

版权声明:本文为ybclaji1原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。