spring框架

Spring框架学习笔记:初识IoC与DI
我今天学习的主要内容。
一、Spring框架概述
Spring是一个轻量级的开源Java框架,最初由Rod Johnson在2003年创建。它的核心特性包括:
- 控制反转(IoC):将对象的创建和管理交给Spring容器
- 依赖注入(DI):通过容器自动装配对象之间的依赖关系
- 面向切面编程(AOP):通过代理模式实现横切关注点的模块化
二、控制反转(IoC)初体验
IoC是Spring最核心的概念。传统编程中,我们直接通过new关键字创建对象:
UserService userService = new UserServiceImpl();
而在Spring中,对象的创建和管理交给Spring容器:
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = context.getBean("userService", UserService.class);
这种将控制权从应用程序转移到框架的设计模式,就是所谓的"控制反转"。
三、依赖注入(DI)的三种方式
Spring主要通过以下三种方式实现依赖注入:
1. 构造器注入
<bean id="userService" class="com.example.UserServiceImpl">
<constructor-arg ref="userRepository"/>
</bean>
2. Setter方法注入
<bean id="userService" class="com.example.UserServiceImpl">
<property name="userRepository" ref="userRepository"/>
</bean>
3. 注解方式注入(最常用)
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserRepository userRepository;
// ...
}
四、Spring Bean的生命周期
了解Bean的生命周期对开发很有帮助:
- 实例化Bean
- 填充属性(依赖注入)
- 调用BeanNameAware的setBeanName()
- 调用BeanFactoryAware的setBeanFactory()
- 调用前置初始化方法(@PostConstruct)
- 调用InitializingBean的afterPropertiesSet()
- 调用自定义的init-method
- Bean准备就绪
- 容器关闭时调用@PreDestroy
- 调用DisposableBean的destroy()
- 调用自定义的destroy-method
五、今天遇到的坑
- 循环依赖问题:当两个Bean互相依赖时,Spring虽然能解决部分情况,但最好避免这种设计
- 自动装配歧义:当有多个相同类型的Bean时,需要使用@Qualifier指定
- 作用域问题:默认是单例(singleton),需要了解prototype、request等其他作用域
六、明日学习计划
- 深入学习Spring AOP的实现原理
- 了解Spring事务管理
- 尝试用Java Config完全替代XML配置
总结
Spring框架通过IoC和DI实现了松耦合的设计,大大提高了代码的可维护性和可测试性。虽然刚开始有些概念比较抽象,但随着实践的深入,越来越能体会到它的精妙之处。
今日金句:"Don't call us, we'll call you." — Spring框架的设计哲学
浙公网安备 33010602011771号