spring 设计模式、核心模块
目录
设计模式
核心模块
1. Spring Core Container(核心容器)
2. Spring AOP(面向切面编程)
3. Spring Data Access(数据访问)
4. Spring Web(Web 开发)
5. Spring Security(安全框架)
6. Spring Messaging(消息传递)
7. Spring Boot
示例代码
设计模式
- 工厂设计模式
- Spring使用工厂模式通过 BeanFactory、ApplicationContext 创建 bean 对象。
- 代理设计模式 :
- Spring AOP 功能的实现。
- 单例设计模式 :
- Spring 中的 Bean 默认都是单例的。
- 原型模式:
- 深拷贝、浅拷贝
- 模板方法模式
- 数据的导入、(AD域、excel导入)
- Spring 中 jdbcTemplate、hibernateTemplate 等以 Template 结尾的
- 对数据库操作的类,它们就使用到了模板模式。
- 包装器设计模式 :
- IO
- 我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要访问不同的数据库。这种模式让我们可以根据客户的需求能够动态切换不同的数据源。
- 观察者模式:
- Spring 事件驱动模型就是观察者模式很经典的一个应用。
- 适配器模式 :
- Spring AOP 的增强或通知(Advice)使用到了适配器模式
- spring MVC 中也是用到了适配器模式适配Controller。
-
核心模块
1.「Spring Core」:Spring核心,它是框架最基础的部分,提供IOC和依赖注入DI特性
2.「Spring Context」:Spring上下文容器,它是 BeanFactory 功能加强的一个子接口
3.「Spring Web」:它提供Web应用开发的支持
4.「Spring MVC」:它针对Web应用中MVC思想的实现
5.「Spring DAO」:提供对JDBC抽象层,简化了JDBC编码,同时,编码更具有健壮性
6.「Spring ORM」:它支持用于流行的ORM框架的整合,
比如:Spring + Hibernate、Spring + iBatis、Spring + JDO的整合等
7.「Spring AOP」:即面向切面编程,它提供了与AOP联盟兼容的编程实现
面试题:
《面试八股文》之 Spring 18卷
Spring 是一个功能强大且广泛应用的 Java 开发框架,它提供了众多组件,这些组件共同协作,为开发者构建企业级应用提供了全面的支持。以下是对 Spring 主要组件的详细介绍:
1. Spring Core Container(核心容器)
核心容器是 Spring 框架的基础,它提供了依赖注入(DI)和控制反转(IOC)的功能,负责创建、管理和维护 Bean 对象。
- BeanFactory:Spring 最基础的容器接口,定义了创建和管理 Bean 的基本方法。它采用懒加载机制,只有在需要时才会创建 Bean 实例。
- ApplicationContext:是
BeanFactory
的子接口,在BeanFactory
的基础上进行了扩展,提供了更多的企业级特性,如国际化支持、事件发布、AOP 支持等。常见的实现类有ClassPathXmlApplicationContext
、FileSystemXmlApplicationContext
、AnnotationConfigApplicationContext
等。 - BeanDefinition:用于描述 Bean 的元数据,包括 Bean 的类名、作用域、依赖关系等。Spring 容器根据
BeanDefinition
来创建和管理 Bean 实例。
2. Spring AOP(面向切面编程)
AOP 是 Spring 框架的一个重要特性,它允许开发者在不修改原有代码的情况下,对程序进行增强。
- AspectJ:Spring AOP 支持使用 AspectJ 作为底层实现。AspectJ 是一个功能强大的 AOP 框架,提供了丰富的切面编程语法和工具。
- Advice(通知):定义了在目标方法执行前后或抛出异常时要执行的代码。常见的通知类型包括前置通知(Before Advice)、后置通知(After Advice)、返回通知(After Returning Advice)、异常通知(After Throwing Advice)和环绕通知(Around Advice)。
- Pointcut(切入点):用于定义哪些方法会被 AOP 增强。可以使用表达式来指定切入点,例如使用 AspectJ 表达式。
- Aspect(切面):是通知和切入点的结合,定义了在哪些切入点上应用哪些通知。
3. Spring Data Access(数据访问)
Spring 提供了对数据访问的支持,简化了与数据库、文件系统等数据存储的交互。
- JDBC(Java Database Connectivity):Spring JDBC 模块提供了对 JDBC 的抽象,简化了 JDBC 编程的复杂性。通过
JdbcTemplate
等工具类,可以方便地执行 SQL 语句、处理结果集等。 - ORM(Object Relational Mapping):Spring 支持多种 ORM 框架,如 Hibernate、MyBatis 等。通过与这些 ORM 框架集成,可以实现对象与数据库表之间的映射,方便进行数据库操作。
- Transaction Management(事务管理):Spring 提供了统一的事务管理抽象,支持编程式事务和声明式事务。声明式事务通过 AOP 实现,开发者可以使用注解(如
@Transactional
)来管理事务。
4. Spring Web(Web 开发)
Spring 提供了丰富的 Web 开发组件,用于构建 Web 应用程序。
- Spring MVC(Model-View-Controller):是 Spring 提供的一个基于 MVC 模式的 Web 框架,用于构建 Web 应用程序。它通过控制器(Controller)处理请求,将请求转发给相应的服务层进行处理,并将处理结果返回给视图(View)进行展示。
- Spring WebFlux:是 Spring 5 引入的响应式 Web 框架,用于构建异步、非阻塞的 Web 应用程序。它基于 Reactor 项目,支持响应式编程模型。
- RESTful Web Services:Spring 支持构建 RESTful Web 服务,通过
@RestController
注解和@RequestMapping
等注解,可以方便地定义 RESTful 接口。
5. Spring Security(安全框架)
Spring Security 是 Spring 提供的一个强大的安全框架,用于保护 Web 应用程序和服务的安全性。
- Authentication(认证):用于验证用户的身份,确保用户是合法的。常见的认证方式包括基于表单的认证、基本认证、OAuth 认证等。
- Authorization(授权):用于控制用户对资源的访问权限,确保用户只能访问其有权限访问的资源。可以通过角色、权限等方式进行授权。
- Web Security:提供了对 Web 应用程序的安全保护,包括防止跨站请求伪造(CSRF)、会话管理、密码加密等功能。
6. Spring Messaging(消息传递)
Spring Messaging 提供了对消息传递的支持,用于构建异步、松耦合的应用程序。
- JMS(Java Message Service):Spring 支持与 JMS 集成,用于实现基于消息队列的异步通信。可以使用
JmsTemplate
等工具类来发送和接收消息。 - AMQP(Advanced Message Queuing Protocol):Spring 支持与 AMQP 协议的消息队列集成,如 RabbitMQ。通过
RabbitTemplate
等工具类,可以方便地进行消息的发送和接收。 - WebSocket:Spring 支持 WebSocket 协议,用于实现实时通信。可以使用
@MessageMapping
等注解来处理 WebSocket 消息。
7. Spring Boot
Spring Boot 是 Spring 提供的一个快速开发框架,用于简化 Spring 应用程序的开发和部署。
- 自动配置:Spring Boot 会根据项目的依赖自动进行配置,减少了开发者的配置工作量。
- 起步依赖:提供了一系列的起步依赖,开发者可以根据项目的需求选择相应的依赖,Spring Boot 会自动处理依赖关系。
- 嵌入式服务器:Spring Boot 支持嵌入式服务器,如 Tomcat、Jetty 等,开发者可以将应用程序打包成可执行的 JAR 文件,直接运行。
示例代码
以下是一个简单的 Spring Boot 应用程序示例,展示了如何使用 Spring MVC 构建一个简单的 RESTful Web 服务:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
// 使用 @SpringBootApplication 注解标注主应用类
@SpringBootApplication
// 使用 @RestController 注解标注控制器类
@RestController
public class HelloWorldApplication {
public static void main(String[] args) {
// 启动 Spring Boot 应用程序
SpringApplication.run(HelloWorldApplication.class, args);
}
// 定义一个 RESTful 接口
@GetMapping("/hello")
public String hello() {
return "Hello, World!";
}
}
在上述代码中,@SpringBootApplication
注解用于启动 Spring Boot 应用程序,@RestController
注解用于定义一个 RESTful 控制器,@GetMapping
注解用于定义一个 HTTP GET 请求的处理方法。
综上所述,Spring 框架提供了丰富的组件,涵盖了核心容器、AOP、数据访问、Web 开发、安全、消息传递等多个领域,开发者可以根据项目的需求选择合适的组件来构建企业级应用。
待完善