一、前期准备:
构建maven工程,导入依赖

创建实体类




二、核心概念:
1.传统开发痛点:
// 传统代码示例
public class OrderService {
private UserDao userDao = new UserDaoImpl();
private PaymentDao paymentDao = new PaymentDaoImpl();
// 更多依赖...
}

问题:人为创建对象,更换实现类需修改源码,违反开闭原则
痛点分析:
耦合严重:每次修改实现类都需要重新编译
难以测试:无法注入Mock对象
对象生命周期失控
2.IOC解决方案:
IOC 启动Spring项目时,spring给我们创建,将创建的对象放到IOC容器中,用的时候直接获取对象就行


核心思想:
将对象创建权交给Spring容器
三、Bean管理方式对比“
(一)创建对象:
1.基于xml方式实现:
<bean id="" class=""/>

bean标签:用于配置对象交给Spring来创建
默认情况下他会调用类中无参数的构造器,如果没有无参数构造器则不能创建成功。
基本属性:
id:Bean实例对象在Spring容器中的唯一标识
class:Bean的全限定类名
2.基于注解的方式实现:
注解:
@Component针对普通类
@Controller针对表现层
@Service 针对业务层
@Repository 针对持久层

(二)、注入属性:属性(对象里的变量)
1.基于xml属性注入:
a.get set方式 <property name 类里面属性的名称 value赋值 /ref>

复杂类型:数组,集合

b.构造器
2.基于注解注入:
@Value普通类型(String int double)
@Autowired引用类型

四、注解驱动开发实战
1. 组件扫描配置
@Configuration
@ComponentScan(
basePackages = "com.example",
excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Controller.class)
)
public class AppConfig {}
2. 依赖注入方式对比
// 构造器注入(Spring官方推荐)
@Service
public class OrderService {
private final UserDao userDao;
@Autowired // Spring 4.3+可省略
public OrderService(UserDao userDao) {
this.userDao = userDao;
}
}
// Setter注入(适合可选依赖)
public class PaymentService {
private RateLimiter rateLimiter;
@Autowired(required = false)
public void setRateLimiter(RateLimiter limiter) {
this.rateLimiter = limiter;
}
}
五、高级特性揭秘
条件化装配示例:
@Bean
@ConditionalOnClass(name = "com.redis.clients.jedis.Jedis")
public CacheService redisCache() {
return new RedisCacheService();
}
生命周期回调执行顺序:
1.构造器 → 2. @PostConstruct → 3. InitializingBean → 4. BeanPostProcessor
4883

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



