Spring框架详细学习笔记

一、Spring框架概述

Spring 是一个轻量级的开源框架,主要用于简化企业级Java应用程序的开发。它提供了全面的基础架构支持,包括依赖注入(Dependency Injection)、面向切面编程(AOP)、事务管理、数据访问、Web开发等。

核心特性:

  • 依赖注入(DI):实现对象之间的解耦
  • 面向切面编程(AOP):实现横切逻辑
  • 事务管理:简化事务操作
  • 整合能力:与MyBatis、JPA、Hibernate、Web等无缝结合
  • 配置灵活:支持XML、注解、Java配置(Java Config)

二、Spring的核心模块

模块名称主要功能
Core ContainerSpring的核心部分,基础的IOC、Bean工厂、资源加载等功能
BeansBean定义、设置、生命周期管理
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() {}
@PostConstructBean初始化方法标注初始化逻辑
@PreDestroyBean销毁前调用标注销毁逻辑

六、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实现横切逻辑的解耦
  • “编程范式”:通过注解和配置实现声明式编程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值