Spring
图片来自百度
1、Sping Core
Spring Core是Spring框架的基础,它提供了IoC(控制反转)和DI(依赖注入)功能,这是Spring框架的核心功能。IoC和DI有助于降低应用程序组件之间的耦合度,提高可维护性和可测试性。
有什么作用?
- 控制反转(IoC)和依赖注入(DI):Spring Core提供了IoC容器的实现,该容器负责管理应用程序中的对象及其生命周期。I
- 资源管理:可以加载各种形式的资源
- 类型转换:可以自动将一种类型的对象转换为另一种类型,而无需手动编写转换代码。
- 事件处理:允许开发者定义和应用程序事件,并注册事件监听器来响应这些事件。
- 扩展性和灵活性: 允许开发者通过扩展点自定义和增强容器的行为。
应用于什么场景?
Web应用开发、企业级应用开发、集成其他框架和库、构建微服务架构、批处理应用
2、Spring Context
Spring Context,即Spring上下文,是Spring框架中的一个核心模块。它提供了应用程序上下文的创建和管理功能,这个上下文可以看作是一个中心化的容器,负责加载、配置和管理Bean对象。
有什么作用?
- Bean的容器和管理:负责创建、初始化、配置和管理应用程序中的Bean。
- 依赖注入(DI):能够将一个Bean所依赖的其他Bean注入到该Bean中,从而实现Bean之间的解耦。
- 资源加载和国际化:可以加载应用程序所需的配置文件、图片、XML等资源。同时,它还支持国际化。
- 事件处理: 允许开发者定义自定义事件,并在适当的时候发布这些事件。
- AOP(面向切面编程)的支持:Spring Context与Spring AOP紧密集成,为开发者提供了面向切面编程的能力。
应用于什么场景?
Web应用开发、企业级应用开发、集成其他框架和库、构建微服务架构、批处理应用
3、Spring AOP
Spring AOP(面向切面编程)是Spring框架的一个重要核心部分,是一种编程思想,也是对面向对象编程(OOP)的一种补充。其主要作用是将功能性需求和非功能性需求进行分离,使开发人员能够集中处理某个关注点或横切逻辑,减少对业务代码的侵入,从而增强代码的可读性和可维护性。
(1) 怎样使用Spring AOP?
使用Spring AOP的具体流程涉及多个步骤,包括定义切面、通知和切入点,然后配置Spring以启用AOP。
需要定义一个切面类,该类包含了通知方法:
定义了一个名为LoggingAspect的切面类,它包含了一个前置通知logBefore和一个后置通知logAfter。
依赖可以在这里找->https://mvnrepository.com/,spring-boot-starter-aop、aspectjweaver
@Aspect
@Component
public class LoggingAspect {
/*
@Before和@After注解分别标识前置通知和后置通知,它们的参数是一个切入点表达式,
这里使用了execution表达式来匹配com.example.service包下所有类的所有方法。
*/
@Before("execution(* com.example.service.*.*(..))")
public void logBefore(JoinPoint joinPoint) {
System.out.println("Before method: " + joinPoint.getSignature().getName());
}
@After("execution(* com.example.service.*.*(..))")
public void logAfter(JoinPoint joinPoint) {
System.out.println("After method: " + joinPoint.getSignature().getName());
}
}
需要在Spring配置中启用AOP:
/*
@EnableAspectJAutoProxy注解告诉Spring启用对AspectJ自动代理的支持,
这样Spring就会自动为匹配的bean创建代理,并将切面织入到目标bean中
*/
@Configuration
@ComponentScan(basePackages = "com.example")
@EnableAspectJAutoProxy
public class AppConfig {
// 配置类可以包含其他bean定义
}
需要在业务逻辑中调用被通知的方法:
@Service
public class MyService {
/*
当MyService的doSomething方法被调用时,
由于配置了AOP,Spring会自动拦截这个方法调用,
并在方法执行前后分别调用LoggingAspect中的logBefore和logAfter方法。
*/
public void doSomething() {
// 业务逻辑代码
System.out.println("Doing something...");
}
}
(2) 有什么作用?
Spring AOP通过解耦业务逻辑与横切关注点、提供代码复用和模块化、支持灵活性和可扩展性、集成和扩展Spring框架以及简化事务管理和安全性控制等方面的作用
4、Spring DAO
Spring DAO(Data Access Object)是Spring框架中用于数据访问的对象。
DAO的主要作用:
- 为应用程序提供访问数据库的接口,从而实现对数据的增删改查等操作。
- 屏蔽了具体的实现技术的不同(如JDBC、Hibernate、MyBatis等),专注于业务逻辑的实现。
- 屏蔽了具体持久化技术的异常
Spring还提供了两种事务管理方式:编程式事务管理和声明式事务管理
(1) 编程式事务管理
这种方式提供了最大的灵活性,但也可能导致代码冗余和复杂性增加。
@Service
public class UserServiceImpl implements UserService {
@Autowired
private JdbcTemplate jdbcTemplate;
@Autowired
private PlatformTransactionManager transactionManager;
public void createUserWithProgrammingStyle(User user) {
TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
@Override
protected void doInTransactionWithoutResult(TransactionStatus status) {
try {
// 假设这里是数据库操作
jdbcTemplate.update("INSERT INTO users (name, email) VALUES (?, ?)", user.getName(), user.getEmail());
} catch (Exception ex) {
// 出现异常,可以决定回滚
status.setRollbackOnly();
}
}
});
}
}
声明式事务管理
声明式事务管理则是通过注解或XML配置来声明哪些方法需要事务管理
/*
通过在类上或方法上添加@Transactional注解,告诉Spring该方法需要在事务的上下文中执行。
如果方法执行过程中抛出异常,Spring会根据配置来决定是否回滚事务。
*/
@Service
@Transactional
public class UserServiceImpl implements UserService {
@Autowired
private JdbcTemplate jdbcTemplate;
public void createUserWithDeclarativeStyle(User user) {
// 数据库操作
jdbcTemplate.update("INSERT INTO users (name, email) VALUES (?, ?)", user.getName(), user.getEmail());
// 如果有异常抛出,Spring会根据配置决定回滚事务
}
}
5、Spring ORM
Spring ORM 是 Spring 框架中用于对象关系映射(Object-Relational Mapping,简称 ORM)的模块。它简化了使用 ORM 框架进行数据库访问的过程,整合了流行的 ORM 解决方案,如 Hibernate、MyBatis。
Spring ORM 有什么作用?
1、集成 ORM 框架
2、透明的事务管理
3、简化的数据访问
4、统一的异常处理
5、与其他 Spring 组件的协同工作
6、Spring Web
Spring Web是一个基于MVC(Model-View-Controller)的web框架,方便前后端数据的传输。
(1) 有什么作用?
Spring Web作用有:简化Web应用的开发、提供前端控制器、处理器映射与处理器、数据绑定与验证、视图解析与渲染、异常处理与拦截器等功能,以及与其他Spring组件的集成
(2) 一次请求的Spring Web的具体流程
1、发送请求:用户通过浏览器或其他客户端向服务器发送HTTP请求。
2、前端控制器接收请求:在服务器端,Spring Web的前端控制器(通常是DispatcherServlet)会捕获到这个请求。
3、请求分发:前端控制器会查询处理器映射(HandlerMapping),根据请求的URL或其他信息找到匹配的处理器(通常是Controller)。
4、处理器执行:一旦找到了匹配的处理器,前端控制器会将请求传递给处理器执行。
5、模型绑定与返回:处理器执行完成后,通常会返回一个ModelAndView对象。这个对象包含了视图名称和数据模型。
6、视图解析与渲染:前端控制器接收到ModelAndView对象后,会查询视图解析器(ViewResolver)来确定使用哪个视图来展示数据。
视图解析器根据视图名称找到相应的视图实现,如JSP、Thymeleaf等。然后,视图会使用数据模型进行渲染,生成最终的HTML页面。
7、响应返回:渲染完成后的HTML页面会作为HTTP响应返回给客户端。客户端接收到响应后,会解析并展示页面内容给用户。
7、Spring MVC
Spring MVC是一个基于Java的Web框架,它实现了MVC设计模式,将Web层进行职责解耦。其中,Model(模型)负责数据和业务逻辑,View(视图)负责显示数据,Controller(控制器)负责接收用户的请求并调用相应的业务逻辑处理请求,然后指定视图将处理结果展示给用户。
一次请求的Spring Web的具体流程,在上面Spring Web中已经说明了
每日鸡汤(1/1):生活就像一杯茶,不会苦一辈子,但总会苦一阵子。只要心中有阳光,生活就会充满希望。