Spring
1. IOC(控制反转)
- 概念:将对象的创建权反转给Spring框架
- 实现技术:依赖注入(DI)
- 依赖注入方式:
- Setter方法注入
- 构造器注入
- 属性注入
- Bean的作用域:
- 单例模式(默认)
- 多例模式(通过scope标签配置)
- 依赖注入方式:
- Bean的实例化方式:
- 默认方式(直接通过标签配置)
- 静态工厂方式
- 动态工厂方式
- **补充说明**:
- **控制反转(IoC)** 的本质是解耦,通过将对象的创建和管理交给 Spring 容器,降低了组件之间的耦合度,提高了代码的可维护性和可测试性。
- **IoC 容器**:Spring 的核心是 IoC 容器,它负责管理 Bean 的生命周期、依赖关系以及配置信息。常见的容器实现包括 ApplicationContext 和 BeanFactory。
- **Bean 的生命周期**:Spring 容器会管理 Bean 的生命周期,包括实例化、依赖注入、初始化、使用和销毁。通过 @PostConstruct 和 @PreDestroy 注解,或者实现 InitializingBean 和 DisposableBean 接口,可以自定义 Bean 的生命周期行为。
2. AOP(面向切面编程)
- 概念:通过切面类对程序进行增强
- 底层实现:动态代理
- 代理类型:
- JDK动态代理(面向接口)
- CGLIB动态代理(面向类)
- 实现原理:反射机制
- 代理类型:
- 应用场景:Spring的声明式事务管理
- **补充说明**:
- **切点(Pointcut)**:定义了哪些方法需要被拦截,通常通过正则表达式或注解来指定。
- **通知(Advice)**:定义了切点被拦截时要执行的操作,如 @Before、@After、@AfterReturning、@AfterThrowing 和 @Around。
- **连接点(Join Point)**:程序执行过程中的一个点,如方法调用或异常抛出。
- **切面(Aspect)**:将切点和通知组合起来,定义了哪些方法需要被拦截以及如何拦截。
- **织入(Weaving)**:将切面应用到目标对象的过程,Spring AOP 的织入是在运行时通过动态代理实现的。
3. 依赖注入(DI)
- 概念:Spring框架在创建Bean时,动态将依赖对象注入到Bean中
- 实现方式:
- Setter方法注入
- 构造器注入
- 属性注入
- 底层实现:反射机制
- **补充说明**:
- **依赖注入的优缺点**:
- **优点**:降低组件之间的耦合度,提高代码的可测试性和可维护性。
- **缺点**:过度依赖 Spring 容器,可能导致代码的可读性降低;依赖注入的配置可能变得复杂。
- **自动装配(@Autowired)**:Spring 提供了自动装配功能,可以通过 @Autowired 注解自动注入依赖对象。自动装配的策略包括按类型装配和按名称装配。
- **依赖注入的优缺点**:
4. 序列化与反序列化
- 概念:
- 序列化:将对象转换为字节序列的过程
- 反序列化:将字节序列还原为对象的过程
- 应用场景:
- 网络传输
- 跨平台存储
- MySQL的一级缓存和二级缓存
- **补充说明**:
- **序列化机制**:Java 中的序列化通过实现 Serializable 接口来实现,序列化时会保存对象的状态和类的元信息。
- **反序列化机制**:反序列化时,JVM 会根据保存的类元信息加载对应的类,并恢复对象的状态。
- **序列化版本号(serialVersionUID)**:用于标识类的版本,如果序列化和反序列化时类的版本号不一致,可能会导致 InvalidClassException。
- **应用场景补充**:除了网络传输和跨平台存储,序列化还常用于分布式缓存(如 Redis)、分布式消息队列(如 Kafka)等场景。
5. 反射机制
- 概念:在运行时动态获取类的信息并调用其方法和属性
- 核心类:Class类
- 获取Class对象的方式:
- Class.forName()
- 类名.class
- 对象.getClass()
- 反射操作:
- 获取属性
- 调用方法
- 创建对象
- 获取Class对象的方式:
- 应用场景:动态代理、依赖注入
- **补充说明**:
- **反射的性能**:反射操作比直接调用代码的性能稍低,但在动态语言和框架中是必不可少的。
- **反射的限制**:反射可以绕过 Java 的访问权限限制,但可能会破坏封装性。因此,需要谨慎使用反射。
- **应用场景补充**:除了动态代理和依赖注入,反射还广泛应用于注解处理、类加载器、动态字节码生成(如 ASM、ByteBuddy)等。
6. 工厂模式
- 静态工厂:通过类名直接调用静态方法获取对象
- 动态工厂:通过实例化工厂类后调用方法获取对象
- **补充说明**:
- **Spring 的工厂模式**:Spring 容器本身就是一个工厂,通过 BeanFactory 或 ApplicationContext 提供 Bean 的创建和管理。
- **工厂模式的优势**:隐藏了对象的创建细节,降低了客户端与对象之间的耦合度。
- **工厂模式的分类**:
- **简单工厂模式**:通过一个工厂类直接创建对象。
- **工厂方法模式**:通过定义工厂接口,让子类决定创建哪个对象。
- **抽象工厂模式**:通过一个抽象工厂类创建一系列相关对象。
7. 注解与配置文件
- IOC的实现方式:
- 配置文件形式
- 注解方式
- AOP的实现方式:
- 配置文件形式
- 注解方式
- **补充说明**:
- **注解的优势**:注解比 XML 配置更简洁,易于理解和维护。Spring 提供了大量注解(如 @Component、@Service、@Controller、@Repository)来简化 Bean 的定义。
- **混合使用注解和配置文件**:在实际项目中,注解和配置文件可以混合使用。例如,使用注解定义 Bean,通过配置文件定义复杂的 Bean 关系或事务管理。
- **Java 配置**:除了注解和 XML 配置,Spring 还支持通过 Java 类的方式定义 Bean 和配置,通过 @Configuration 注解和 @Bean 注解实现。
8. 代理模式
- 静态代理:手动编写代理类
- 动态代理:通过反射机制动态生成代理类
- JDK动态代理:面向接口
- CGLIB动态代理:面向类
- **补充说明**:
- **代理模式的优势**:代理模式可以在不修改目标对象代码的情况下,扩展目标对象的功能。
- **Spring AOP 的代理机制**:
- 如果目标对象实现了接口,Spring 默认使用 JDK 动态代理。
- 如果目标对象没有实现接口,Spring 使用 CGLIB 动态代理。
- 可以通过配置强制使用 CGLIB 代理(如设置 proxy-target-class=true)。
9. JDBC模板技术
- 概念:Spring对JDBC的封装,简化数据库操作
- 实现类:JdbcTemplate
- 应用场景:操作数据库
- **补充说明**:
- **JdbcTemplate 的优势**:简化了 JDBC 操作,自动处理数据库连接的获取和关闭,减少了重复代码。
- **数据访问对象(DAO)模式**:JdbcTemplate 常用于实现 DAO 层,将数据访问逻辑封装在独立的类中。
- **事务管理**:Spring 提供了声明式事务管理,通过注解(@Transactional)或配置文件定义事务规则。
10. 连接池
- 概念:管理数据库连接,提高性能
- 应用场景:Spring框架中的数据库连接管理
- **补充说明**:
- **常见的连接池实现**:Spring 支持多种连接池实现,如 HikariCP、Druid 和 Apache DBCP。HikariCP 是性能最高的连接池,Druid 提供了强大的监控功能。
- **连接池的作用**:通过复用数据库连接,减少连接创建和销毁的开销,提高数据库访问性能。
- **配置连接池**:可以通过配置文件或注解配置连接池的参数,如最大连接数、最小空闲连接数、连接超时时间等。
11.事件驱动模型
- **概念**:Spring 支持事件驱动编程,允许组件之间通过事件进行通信。
- **核心组件**:
- **事件(ApplicationEvent)**:继承自 ApplicationEvent 的类,表示事件。
- **事件监听器(EventListener)**:通过 @EventListener 注解或实现 ApplicationListener 接口,定义事件的处理逻辑。
- **事件发布器(ApplicationEventPublisher)**:通过 ApplicationEventPublisher 接口发布事件。
- **应用场景**:事件驱动模型常用于异步处理、解耦组件之间的通信、实现观察者模式等。
12.Spring Boot
- **概念**:Spring Boot 是基于 Spring 框架的微服务开发框架,旨在简化 Spring 应用的开发。
- **核心特性**:
- **自动配置(Auto-Configuration)**:根据项目中的依赖自动配置 Spring Bean 和相关功能。
- **Starters**:通过 Starters 简化依赖管理,快速搭建项目。
- **独立运行**:Spring Boot 应用可以打包为独立的 JAR 文件,包含嵌入式服务器(如 Tomcat、Jetty)。
- **生产就绪功能**:提供健康检查、指标监控、日志管理等生产就绪功能。
- **应用场景**:Spring Boot 是构建微服务、RESTful API 和企业级应用的首选框架。
13.Spring Security
- **概念**:Spring Security 是一个强大的安全框架,用于保护 Spring 应用的安全。
- **核心功能**:
- **认证(Authentication)**:验证用户身份,支持多种认证方式(如用户名/密码、OAuth2、JWT)。
- **授权(Authorization)**:控制用户对资源的访问权限,支持基于角色的访问控制(RBAC)和基于方法的访问控制。
- **密码加密**:支持多种密码加密算法(如 BCrypt、SHA-256)。
- **应用场景**:Spring Security 广泛应用于 Web 应用、微服务、API 网关等场景的安全管理。