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
  • 用来做微服务开发
Spring是掠过Java大地的一阵清风。Spring是以反向控制设计原理为基础,无需EJB而功能依然强大的轻量级J2EE开发框架。Spring大大简化了使用接口开发的复杂性,并且加快和简化了应用系统的开发。使用简单JavaBean就可以得到EJB的强大功能。<br>本书介绍了Spring背后的原理,引领你迅速进入对框架的体验之中。结合简短代码片断和贯穿全书的持续示例,本书向你展示了如何创建简单有效的J2EE应用系统。你将看到如何使用先进的开源工具解决持久层问题,以及如何将你的应用系统与其他流行Web框架集成。你将学习如何使用Spring管理大量的基础设施代码,这样你就可以将注意力集中在真正的问题上——重要的业务需要。<br>本书内容:<br>·使用Hibernate、JDO、iBatis、OJB以及JDBC开发持久层;<br>·声明式事务与事务管理;<br>·与其他Web框架集成:Struts、WebWork、Tapestry、Velocity;<br>·访问J2EE服务,如JMS和EJB;<br>·使用AOP解决交叉问题;<br>·企业组应用系统最佳实践。<br>“……一种解释Spring中各个主题的很好途径……我喜欢这本书”<br>——Christian Parker,Adigio公司总裁<br>“……没有其他书籍可以与这本书的实用性相提并论。”<br>——Olivier Jolly,J2EE构架师,Interface SI<br>“我很喜欢这种展示Spring的方式。”<br>——Norman Richards,XDoclet in Action的作者之一<br>“我极力推荐这本书。”<br>——Jack Herrington,Code Generation in Action的作者 <br>----总共8部分rar下载完后解压 -----<br>Spring in Action. 中文版.part1.rar<br>Spring in Action. 中文版.part2.rar<br>Spring in Action. 中文版.part3.rar<br>Spring in Action. 中文版.part4.rar<br>Spring in Action. 中文版.part5.rar<br>Spring in Action. 中文版.part6.rar<br>Spring in Action. 中文版.part7.rar<br>Spring in Action. 中文版.part8.rar<br>
目录 第一部分spring的核心 第1章开始spring之旅 1.1spring是什么 1.2开始spring之旅 1.3理解依赖注入 1.3.1依赖注入 1.3.2di应用 1.3.3企业级应用中的依赖注入 1.4应用aop 1.4.1aop介绍 1.4.2aop使用 1.5小结 第2章基本bean装配 2.1容纳你的bean 2.1.1beanfactory介绍 2.1.2使用应用上下文 2.1.3bean的生命 2.2创建bean 2.2.1声明一个简单的bean 2.2.2通过构造函数注入 2.3注入bean属性 2.3.1注入简单的数值 2.3.2使用其他的bean 2.3.3装配集合 2.3.4装配空值 2.4自动装配 2.4.1四种自动装配类型 2.4.2混合使用自动和手动装配 2.4.3何时采用自动装配 2.5控制bean创建 2.5.1bean范围化 2.5.2利用工厂方法来创建bean 2.5.3初始化和销毁bean 2.6小结 第3章高级bean装配 3.1声明父bean和子bean 3.1.1抽象基bean类型 3.1.2抽象共同属性 3.2方法注入 3.2.1基本的方法替换 3.2.2获取器注入 3.3注入非springbean 3.4注册自定义属性编辑器 3.5使用spring的特殊bean 3.5.1后处理bean 3.5.2bean工厂的后处理 3.5.3配置属性的外在化 3.5.4提取文本消息 3.5.5程序事件的解耦 3.5.6让bean了解容器 3.6脚本化的bean 3.6.1给椰子上lime 3.6.2脚本化bean 3.6.3注入脚本化bean的属性 3.6.4刷新脚本化bean 3.6.5编写内嵌的脚本化bean 3.7小结 第4章通知bean 4.1aop简介 4.1.1定义aop术语 4.1.2spring对aop的支持 4.2创建典型的spring切面 4.2.1创建通知 4.2.2定义切点和通知者 4.2.3使用proxyfactorybean 4.3自动代理 4.3.1为spring切面创建自动代理 4.3.2自动代理@aspectj切面 4.4定义纯粹的pojo切面 4.5注入aspectj切面 4.6小结 第二部分企业spring 第5章使用数据库 5.1spring的数据访问哲学 5.1.1了解spring数据访问的异常体系 5.1.2数据访问的模板化 5.1.3使用dao支持类 5.2配置数据源 5.2.1使用jndi数据源 5.2.2使用数据源连接池 5.2.3基于jdbc驱动的数据源 5.3在spring里使用jdbc 5.3.1处理失控的jdbc代码 5.3.2使用jdbc模板 5.3.3使用spring对jdbc的dao支持类 5.4在spring里集成hibernate 5.4.1选择hibernate的版本 5.4.2使用hibernate模板 5.4.3建立基于hibernate的dao 5.4.4使用hibernate3上下文会话 5.5springjava持久api 5.5.1使用jpa模板 5.5.2创建一个实体管理器工厂 5.5.3建立使用jpa的dao 5.6spring和ibatis 5.6.1配置ibatis客户模板 5.6.2建立基于ibatis的dao 5.7缓存 5.7.1配置缓存方案 5.7.2缓存的代理bean 5.7.3注解驱动的缓存 5.8小结 第6章事务管理 6.1理解事务 6.1.1仅用4个词解释事务 6.1.2理解spring对事务管理的支持 6.2选择事务管理器 6.2.1jdbc事务 6.2.2hibernate事务 6.2.3jpa事务 6.2.4jdo事务 6.2.5jta事务 6.3在spring中编写事务 6.4声明式事务 6.4.1定义事务参数 6.4.2代理事务 6.4.3在spring2.0里声明事务 6.4.4定义注释驱动事务 6.5小结 第7章保护spring 7.1springsecurity介绍 7.2验证用户身份 7.2.1配置providermanager 7.2.2根据数据库验证身份 7.2.3根据ldap仓库进行身份验证 7.3控制访问 7.3.1访问决策投票 7.3.2决定如何投票 7.3.3处理投票弃权 7.4保护web应用程序 7.4.1代理springsecurity的过滤器 7.4.2处理安全上下文 7.4.3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值