一、Spring框架概述
Spring 是一个轻量级的开源框架,主要用于简化企业级Java应用程序的开发。它提供了全面的基础架构支持,包括依赖注入(Dependency Injection)、面向切面编程(AOP)、事务管理、数据访问、Web开发等。
核心特性:
- 依赖注入(DI):实现对象之间的解耦
- 面向切面编程(AOP):实现横切逻辑
- 事务管理:简化事务操作
- 整合能力:与MyBatis、JPA、Hibernate、Web等无缝结合
- 配置灵活:支持XML、注解、Java配置(Java Config)
二、Spring的核心模块
| 模块名称 | 主要功能 |
|---|---|
| Core Container | Spring的核心部分,基础的IOC、Bean工厂、资源加载等功能 |
| Beans | Bean定义、设置、生命周期管理 |
| Context | 类似ApplicationContext,提供IOC容器体系、事件多播等 |
| Expression Language (SpEL) | 表达式语言,用于动态表达式解析 |
| JDBC以及ORM模块 | 简化数据库访问,支持JDBC、MyBatis、Hibernate等 |
| Transaction | 事务管理,实现声明式和编程式事务控制 |
| Web模块 | Web相关功能(Spring MVC) |
| AOP | 面向切面编程,支持编写切面、通知、切入点 |
| Testing | 测试支持,包括JUnit集成等 |
三、核心原理与设计思想
1. 依赖注入(Dependency Injection,简称DI)
- 目的:解耦对象,提升模块复用性和测试性
- 实现方式:通过容器在运行时动态装配对象的依赖
- 类型:
- 构造器注入 -Setter方法注入
- 字段注入(通过注解)
2. 控制反转(IoC)
- 理念:对象的控制权由程序员转交给Spring容器管理
3. AOP
- 作用:通过定义切面,插入横切逻辑(日志、安全、事务等)
- 实现方式:动态代理(JDK代理、CGLIB)
4. 配置方式
- XML配置(传统)
- 注解配置(现代)
- Java配置(
@Configuration类)
5. Bean生命周期
- 实例化 → 填充属性 → 初始化 → 使用 → 销毁
四、Spring启动步骤(示例流程)
// Java配置示例
@Configuration
@ComponentScan("com.example")
public class AppConfig {
@Bean
public UserService userService() {
return new UserServiceImpl();
}
}
// 运行代码
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
UserService userService = context.getBean(UserService.class);
userService.perform();
五、常用核心注解
| 注解 | 作用 | 示例 |
|---|---|---|
@Component | 将类注册为Spring容器管理的组件 | @Component public class User {} |
@Controller | 标识Web控制层组件 | @Controller public class UserController {} |
@Service | 标识业务层组件 | @Service public class UserService {} |
@Repository | 标识数据访问层组件,支持异常转换 | @Repository public class UserDAO {} |
@Autowired | 自动注入依赖对象 | @Autowired private UserRepository userRepository; |
@Qualifier | 指定注入哪个实现类 | @Autowired @Qualifier("userRepositoryImpl") |
@Value | 赋值表达式或配置参数 | @Value("${app.name}") |
@Configuration | 标识Java配置类 | @Configuration public class AppConfig {} |
@Bean | 定义Bean对象 | @Bean public UserService userService() {} |
@PostConstruct | Bean初始化方法 | 标注初始化逻辑 |
@PreDestroy | Bean销毁前调用 | 标注销毁逻辑 |
六、Spring的配置方式
1. XML配置(传统方式)
<beans xmlns="http://www.springframework.org/schema/beans"
...>
<bean id="userService" class="com.example.UserServiceImpl"/>
</beans>
2. 注解配置(现代推荐)
- 在Java类上使用
@Configuration和@ComponentScan扫描组件 - 使用
@Autowired自动装配依赖
3. Java配置(完全基于代码)
@Configuration
public class AppConfig {
@Bean
public UserService userService() {
return new UserServiceImpl();
}
}
4. 组合使用
结合使用Java配置和注解,灵活多变。
七、Spring事务管理
1. 声明式事务
- 在配置类或方法上添加
@Transactional - 作用范围内的方法自动开启事务
@Service
public class AccountService {
@Transactional
public void transfer(Account from, Account to, BigDecimal amount) {
// 转账逻辑
}
}
2. 编程式事务
- 通过事务管理器手动控制事务(较少用)
TransactionStatus status = transactionManager.getTransaction(definition);
try {
// 业务逻辑
transactionManager.commit(status);
} catch(Exception e) {
transactionManager.rollback(status);
}
八、Spring MVC 简述
- 作用:Web应用的Model-View-Controller框架
- 核心思想:请求到控制器(Controller)处理,返回视图(View)
- 主要注解
@Controller:标识控制层@RequestMapping:映射请求路径@RestController:组合@Controller和@ResponseBody,返回JSON@Autowired:注入业务层@ResponseBody:返回数据直接作为响应体
示例:
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/{id}")
public User getUser(@PathVariable int id) {
return userService.getUserById(id);
}
}
九、Spring的其他重要功能
1. 事件机制
- Spring事件发布和监听机制,支持自定义事件通知
2. 定时任务
@Scheduled注解开启定时任务
@Scheduled(cron = "0 0/1 * * * ?")
public void reportCurrentTime() {
System.out.println("每分钟执行一次");
}
3. 缓存支持
- 集成Spring Cache抽象,支持多种实现(Ehcache、Redis等)
4. 集成第三方技术
- Spring Boot:快速开发工具
- Spring Data:简化数据访问
- Spring Security:安全框架
十、总结与核心思想
- “配置优于编码”:强调灵活配置,减少硬编码
- “解耦合”:通过DI实现对象之间的低耦合
- “模块划分明确”:不同模块职责清晰
- “面向切面”:AOP实现横切逻辑的解耦
- “编程范式”:通过注解和配置实现声明式编程

1199

被折叠的 条评论
为什么被折叠?



