Spring 之 JPA
Spring 之 JPAJPA 为对象关系映射提供了一种基于 POJO 的持久化模型。 简化数据持久化代码的开发 为 Java 社区屏蔽不同持久化 API 的差异 Repository 是数据访问的抽象接口,JPA 是这种抽象的具体实现标准 快速入门(1)在 pom.xml 中引入依赖 1234<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId></dependency> (2)设置启动注解 123456789101112// 【可选】指定扫描的 Entity 目录,如果不指定,会扫描全部目录@EntityScan("io.github.dunwu.springboot.data.jpa")// 【可选】指定扫描的 Repository 目录,如果不指定,会扫描全部目录@EnableJpaReposit...
Spring 之事务
理解事务在软件开发领域,全有或全无的操作被称为事务(transaction)。事务允许你将几个操作组合成一个要么全部发生要么全部不发生的工作单元。传统上 Java EE 开发对事务管理有两种选择:全局事务或本地事务,两者都有很大的局限性。 事务应该具有 4 个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为 ACID。 快速入门创建 Service 接口实现类 TransactionServiceA 类,在 methodA() 方法中先往 tablea 表格插入一条数据,随后会调用 TransactionServiceB 服务的 methodB() 方法往 tableb 表格中插入一条数据。 123456789101112131415@Servicepublic class TransactionServiceA { @Autowired private TableService tableService; @Autowired private TransactionServiceB transactionServiceB; pub...
SpringBoot 之 Profile
SpringBoot 之 Profile 一个应用为了在不同的环境下工作,常常会有不同的配置,代码逻辑处理。Spring Boot 对此提供了简便的支持。 关键词: @Profile、spring.profiles.active 区分环境的配置properties 配置假设,一个应用的工作环境有:dev、test、prod 那么,我们可以添加 4 个配置文件: applcation.properties - 公共配置 application-dev.properties - 开发环境配置 application-test.properties - 测试环境配置 application-prod.properties - 生产环境配置 在 applcation.properties 文件中可以通过以下配置来激活 profile: 1spring.profiles.active = test yml 配置与 properties 文件类似,我们也可以添加 4 个配置文件: applcation.yml - 公共配置 application-dev.yml - 开发环境配置 ...
SpringBoot 之属性加载详解
加载 property 顺序Spring Boot 加载 property 顺序如下: Devtools 全局配置 (当 devtools 被激活 ~/.spring-boot-devtools.properties). 测试环境中的 @TestPropertySource 注解配置 测试环境中的属性 properties:@SpringBootTest 和 测试注解. 命令行参数 SPRING_APPLICATION_JSON 属性 ServletConfig 初始化参数 ServletContext 初始化参数 JNDI attributes from 通过 java:comp/env 配置的 JNDI 属性 Java 系统属性 (System.getProperties()) 操作系统环境比那里 RandomValuePropertySource 加载 random.* 形式的属性 jar 包外的 application-{profile}.properties 或 application-{profile}.yml 配置 jar ...
SpringBoot 之快速入门
Spring Boot 简介Spring Boot 可以让使用者非常方便的创建 Spring 应用。 Spring Boot 的目标是: 为所有 Spring 开发者提供更快且可广泛访问的入门体验。 开箱即用 提供一系列通用的非功能特性(例如嵌入式服务、安全、指标、健康检查和外部化配置) 完全不需要代码生成,也不需要 XML 配置。 Spring Boot 系统要求Spring Boot 的构建工具要求: Build Tool Version Maven 3.5+ Gradle 6.8.x, 6.9.x, and 7.x Spring Boot 支持的 Servlet 容器: Name Servlet Version Tomcat 9.0 4.0 Jetty 9.4 3.1 Jetty 10.0 4.0 Undertow 2.0 4.0 部署第一个 Spring Boot 项目 本节介绍如何开发一个小的“Hello World!” web 应用示例,来展示 Spring Boot 的一些关键功能。我们使用 Maven 来构建这个...
Spring 校验
Spring 校验Java API 规范(JSR303)定义了Bean校验的标准validation-api,但没有提供实现。hibernate validation是对这个规范的实现,并增加了校验注解如@Email、@Length等。Spring Validation是对hibernate validation的二次封装,用于支持spring mvc参数自动校验。 快速入门引入依赖如果 spring-boot 版本小于 2.3.x,spring-boot-starter-web 会自动传入 hibernate-validator 依赖。如果 spring-boot 版本大于 2.3.x,则需要手动引入依赖: 12345<dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator-parent</artifactId> <version>6.2.5.Final</version>...
Spring 资源管理
Spring 资源管理 Version 6.0.3 Resource 接口相对标准 URL 访问机制,Spring 的 org.springframework.core.io.Resource 接口抽象了对底层资源的访问接口,提供了一套更好的访问方式。 12345678910111213141516171819202122232425262728public interface Resource extends InputStreamSource { boolean exists(); boolean isReadable(); boolean isOpen(); boolean isFile(); URL getURL() throws IOException; URI getURI() throws IOException; File getFile() throws IOException; ReadableByteChannel readableChannel() throws IOException; l...
Spring AOP
AOP 概念什么是 AOPAOP(Aspect-Oriented Programming,即 面向切面编程)与 OOP( Object-Oriented Programming,面向对象编程) 相辅相成,提供了与 OOP 不同的抽象软件结构的视角。 在 OOP 中,我们以类(class)作为我们的基本单元,而 AOP 中的基本单元是 Aspect(切面) 术语Aspect(切面)aspect 由 pointcount 和 advice 组成, 它既包含了横切逻辑的定义, 也包括了连接点的定义. Spring AOP 就是负责实施切面的框架, 它将切面所定义的横切逻辑织入到切面所指定的连接点中.AOP 的工作重心在于如何将增强织入目标对象的连接点上, 这里包含两个工作: 如何通过 pointcut 和 advice 定位到特定的 joinpoint 上 如何在 advice 中编写切面代码. 可以简单地认为, 使用 @Aspect 注解的类就是切面. advice(增强)由 aspect 添加到特定的 join point(即满足 point cut 规则的 join poin...
Spring IoC 依赖来源
依赖查找的来源查找来源 来源 配置元数据 Spring BeanDefinition <bean id ="user" class="xxx.xxx.User"> @Bean public User user() {...} BeanDefinitionBuilder 单例对象 API 实现 Spring 內建 BeanDefintion Bean 名称 Bean 实例 使用场景 org.springframework.context.annotation.internalConfigurationAnnotationProcessor ConfigurationClassPostProcessor 对象 处理 Spring 配置类 org.springframework.context.annotation.internalAutowiredAnnotationProcessor AutowiredAnnotationBeanPostProcessor 对象 ...
Spring 依赖注入
Spring 依赖注入DI,是 Dependency Injection 的缩写,即依赖注入。依赖注入是 IoC 的最常见形式。依赖注入是手动或自动绑定的方式,无需依赖特定的容器或 API。 依赖注入 (Dependency Injection,简称 DI) 是一个过程,其中对象仅通过构造函数参数、工厂方法的参数或对象实例在构造或从工厂方法返回。然后容器在创建 bean 时注入这些依赖项。这个过程基本上是 bean 本身的逆过程(因此得名,控制反转),它通过使用类的直接构造或服务定位器模式自行控制其依赖项的实例化或位置。 使用 DI,代码更干净,当对象具有依赖关系时,解耦更有效。对象不查找其依赖项,也不知道依赖项的位置或类别。结果,您的类变得更容易测试,特别是当依赖关系在接口或抽象基类上时,它们允许在单元测试中使用存根或模拟实现。 容器全权负责组件的装配,它会把符合依赖关系的对象通过 JavaBean 属性或者构造函数传递给需要的对象。 DI 是组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。依赖注入的目的并非为软件系统带来更多功能,而是...