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的生命周期对开发很有帮助:

  1. 实例化Bean
  2. 填充属性(依赖注入)
  3. 调用BeanNameAware的setBeanName()
  4. 调用BeanFactoryAware的setBeanFactory()
  5. 调用前置初始化方法(@PostConstruct)
  6. 调用InitializingBean的afterPropertiesSet()
  7. 调用自定义的init-method
  8. Bean准备就绪
  9. 容器关闭时调用@PreDestroy
  10. 调用DisposableBean的destroy()
  11. 调用自定义的destroy-method

五、今天遇到的坑

  1. 循环依赖问题:当两个Bean互相依赖时,Spring虽然能解决部分情况,但最好避免这种设计
  2. 自动装配歧义:当有多个相同类型的Bean时,需要使用@Qualifier指定
  3. 作用域问题:默认是单例(singleton),需要了解prototype、request等其他作用域

六、明日学习计划

  1. 深入学习Spring AOP的实现原理
  2. 了解Spring事务管理
  3. 尝试用Java Config完全替代XML配置

总结

Spring框架通过IoC和DI实现了松耦合的设计,大大提高了代码的可维护性和可测试性。虽然刚开始有些概念比较抽象,但随着实践的深入,越来越能体会到它的精妙之处。

今日金句:"Don't call us, we'll call you." — Spring框架的设计哲学

posted @ 2025-04-02 19:58  f-52Hertz  阅读(25)  评论(0)    收藏  举报