目录
设计模式
核心模块
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 开发、安全、消息传递等多个领域,开发者可以根据项目的需求选择合适的组件来构建企业级应用。
待完善