1. 什么是 Spring 框架?
Spring 是一个 轻量级、开源的 Java 应用程序框架,用于简化企业级应用程序的开发。它的主要目标是通过 控制反转(IoC) 和 面向切面编程(AOP) 来解耦代码,使应用程序更具可维护性和扩展性。Spring 主要用于 依赖注入、事务管理、MVC 结构、数据访问、远程调用 等企业级应用开发。
Spring 作为一个完整的应用框架,可以与多种技术整合,如 Hibernate、MyBatis、Struts、JDBC,并支持 微服务架构,如 Spring Boot 和 Spring Cloud。
2. Spring 的七大核心模块
Spring 框架由多个模块组成,每个模块都有特定的功能,下面逐一讲解:
1. Core 模块(核心容器,IoC/DI)
核心功能:
- 提供 依赖注入(Dependency Injection,DI),实现 控制反转(Inversion of Control,IoC)。
- Spring 容器会管理 Bean 的生命周期,并自动处理 Bean 之间的依赖关系。
- 主要包括
BeanFactory
、ApplicationContext
等核心组件。
关键类和接口:
BeanFactory
:最基本的 IoC 容器,延迟加载 Bean。ApplicationContext
:高级 IoC 容器,提供事件监听、国际化等功能。XmlBeanFactory
(已废弃):基于 XML 配置的 Bean 工厂。
示例:
<!-- 定义 Bean -->
<bean id="userService" class="com.example.UserService"><property name="userRepository" ref="userRepository"/>
</bean>
// 从容器中获取 Bean
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = context.getBean(UserService.class);
2. AOP 模块(面向切面编程)
核心功能:
- AOP(Aspect-Oriented Programming) 允许开发者在不修改原代码的情况下,动态地增强代码(如日志记录、事务管理、权限控制)。
- 通过 切面(Aspect)、通知(Advice)、切点(Pointcut)、连接点(JoinPoint) 实现方法级别的增强。
关键组件:
@Aspect
:定义切面类。@Pointcut
:定义切入点(在哪些方法上生效)。@Before
、@After
、@Around
等注解:定义不同类型的增强。
示例:
@Aspect
@Component
public class LoggingAspect {@Before("execution(* com.example.service.*.*(..))")public void beforeMethod(JoinPoint joinPoint) {System.out.println("方法调用前:" + joinPoint.getSignature().getName());}
}
3. ORM 模块(数据库访问支持)
核心功能:
- Spring 提供对主流 ORM(对象关系映射)框架 的集成,如 Hibernate、MyBatis、JPA,简化数据库访问代码。
特点:
- 统一事务管理
- 通过
JdbcTemplate
统一管理数据库连接
示例(Spring + MyBatis):
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/>
</bean>
@Repository
public class UserRepository {@Autowiredprivate SqlSessionFactory sqlSessionFactory;public User getUserById(int id) {SqlSession session = sqlSessionFactory.openSession();return session.selectOne("getUserById", id);}
}
4. DAO 模块(数据访问层,JDBC 封装)
核心功能:
JdbcTemplate
:封装 JDBC 操作,减少 样板代码(如连接、关闭数据库)。- 事务管理:提供 声明式事务管理(@Transactional),避免手动管理事务。
示例:
@Service
public class UserService {@Autowiredprivate JdbcTemplate jdbcTemplate;public void addUser(String name) {String sql = "INSERT INTO users (name) VALUES (?)";jdbcTemplate.update(sql, name);}
}
5. Web 模块(Web 开发支持)
核心功能:
- 提供
Spring Web
相关功能,如 Servlet 监听器、Web 应用上下文、文件上传等。 - 支持 Spring MVC,也可以整合 Struts、JSF、GWT 等框架。
示例(Spring MVC 控制器):
@Controller
@RequestMapping("/user")
public class UserController {@GetMapping("/{id}")public String getUser(@PathVariable int id, Model model) {model.addAttribute("user", new User(id, "张三"));return "userDetail";}
}
6. Context 模块(应用上下文)
核心功能:
- 扩展 IoC 容器,提供 事件传播、国际化、资源访问 等功能。
- 允许外部程序访问 Spring 管理的 Bean。
示例(加载上下文):
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
UserService userService = context.getBean(UserService.class);
7. MVC 模块(Spring MVC)
核心功能:
- Spring MVC 是一个 轻量级的 Web 框架,基于 Servlet 提供 请求处理、参数绑定、视图解析。
- 遵循 前端控制器模式(DispatcherServlet),所有请求先经过
DispatcherServlet
处理。
主要组件:
DispatcherServlet
(前端控制器)Controller
(控制器)ViewResolver
(视图解析器)ModelAndView
(模型视图)
示例(Spring MVC 控制器):
@RestController
@RequestMapping("/api")
public class UserController {@GetMapping("/users/{id}")public User getUser(@PathVariable int id) {return new User(id, "张三");}
}
总结
模块 | 作用 |
---|---|
Core | IoC/DI(控制反转),管理 Bean 的生命周期 |
AOP | 面向切面编程(事务、日志等) |
ORM | 兼容 Hibernate、MyBatis、JPA 等 ORM 框架 |
DAO | JdbcTemplate ,封装 JDBC 操作 |
Web | 提供 Web 支持,整合 Struts2、Servlet |
Context | 提供 Bean 访问、事件传播、国际化支持 |
MVC | 轻量级 MVC 框架,支持 REST API |
Spring 作为 Java 生态中的核心框架,提供了强大的 企业级应用支持,包括 数据库访问、Web 开发、事务管理,也是 Spring Boot 和 Spring Cloud 的基础。