spring
一、Spring概述
1.1 Spring是什么
Spring是一个分层的Java SE/EE full-stack(一站式,指的是它能够为Java应用提供从表现层到持久层的完整解决方案)轻量级开源框架,以 IOC(Inverse Of Control:反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核。
在Java三层架构当中分别提供了相应技术:
表现层(web层) :SpringMVC 框架
业务层(service层) :Bean管理(IOC容器),声明式事务
持久层(dao层) :JdbcTemplate模板对象以及提供了ORM模块整合其他优秀的持久层技术
1.2 Spring框架的优势
方便解耦,简化开发: Spring 就是一个大工厂,可以管理所有对象的创建和依赖关系维护,交给Spring管理
AOP 编程的支持: 可以方便的实现对程序进行权限拦截,日志记录,运行的监控
声明式事务的支持: 通过配置方式完成对事务的管理,无需手动编程
方便程序的测试: 对Junit支持,可以通过注解方便的对Spring程序进行测试
整合外部优秀技术: Spring内部提供了对各种优秀框架(Hibernate,Mybatis,Quartz等)的直接支持
二、Spring IOC 机制的详解
2.1 IOC 核心概念
2.1.1 控制反转 (Inversion of Control)
控制反转是一种设计原则,它将传统编程中由程序主动创建和管理对象的方式反转,改由容器来负责对象的创建和依赖注入。例如:
- 传统方式:
UserService userService = new UserServiceImpl(); - IOC方式:容器自动创建并注入
UserService实例
2.1.2 依赖注入 (Dependency Injection)
依赖注入是IOC的具体实现方式,主要有三种形式:
- 构造器注入:通过构造函数参数注入依赖
- Setter注入:通过setter方法注入依赖
- 字段注入:通过反射直接注入字段(不推荐)
2.2 Spring IOC 容器实现
2.2.1 BeanFactory
基础IOC容器接口,提供基本的DI功能:
- 延迟初始化:只有使用时才创建Bean
- 适合资源受限环境
- 核心方法:
getBean(),containsBean(),isSingleton()
2.2.2 ApplicationContext
BeanFactory的扩展,提供更多企业级功能:
- 预初始化所有单例Bean
- 支持国际化、事件发布
- 集成AOP、事务管理等
- 常见实现类:
ClassPathXmlApplicationContext:基于类路径的XML配置AnnotationConfigApplicationContext:基于注解的配置WebApplicationContext:Web应用专用
2.3 Bean 生命周期管理
完整生命周期包含以下阶段:
- 实例化:调用构造函数创建对象
- 属性赋值:注入依赖属性
- 初始化:
- 调用
BeanNameAware接口方法 - 调用
BeanFactoryAware接口方法 - 调用
@PostConstruct注解方法 - 调用
InitializingBean.afterPropertiesSet() - 调用自定义init方法
- 调用
- 使用中:业务方法调用
- 销毁:
- 调用
@PreDestroy注解方法 - 调用
DisposableBean.destroy() - 调用自定义destroy方法
- 调用
2.4 依赖注入方式详解
2.4.1 XML配置方式
<bean id="userService" class="com.example.UserServiceImpl">
<property name="userDao" ref="userDao"/>
</bean>
<bean id="userDao" class="com.example.UserDaoImpl"/>
2.4.2 注解配置方式
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
// ...
}
@Repository
public class UserDaoImpl implements UserDao {
// ...
}
2.4.3 Java配置方式
@Configuration
public class AppConfig {
@Bean
public UserService userService() {
return new UserServiceImpl(userDao());
}
@Bean
public UserDao userDao() {
return new UserDaoImpl();
}
}
2.5 高级特性
2.5.1 自动装配
@Autowired:按类型自动装配@Qualifier:配合@Autowired指定具体Bean@Resource:JSR-250标准注解,可按名称或类型装配
2.5.2 作用域管理
singleton:默认,每个容器一个实例prototype:每次请求新实例request:每个HTTP请求新实例session:每个HTTP会话新实例application:ServletContext生命周期
2.5.3 条件化装配
@Conditional:基于条件创建Bean@Profile:环境相关的Bean配置
2.6 实际应用场景
2.6.1 服务层解耦
通过IOC容器管理Service及其依赖的DAO,实现层间解耦。
2.6.2 单元测试支持
可以轻松替换真实依赖为Mock对象进行测试。
2.6.3 插件式架构
通过配置不同的Bean实现,无需修改代码即可切换功能模块。
2.6.4 微服务配置
在Spring Cloud中,IOC容器管理各种微服务组件及其依赖关系。
三、Spring IOC 机制的详解
3.1 IOC 核心概念
3.1.1 控制反转 (Inversion of Control)
控制反转是一种设计原则,它将传统编程中由程序主动创建和管理对象的方式反转,改由容器来负责对象的创建和依赖注入。例如:
- 传统方式:
UserService userService = new UserServiceImpl(); - IOC方式:容器自动创建并注入
UserService实例
3.1.2 依赖注入 (Dependency Injection)
依赖注入是IOC的具体实现方式,主要有三种形式:
- 构造器注入:通过构造函数参数注入依赖
- Setter注入:通过setter方法注入依赖
- 字段注入:通过反射直接注入字段(不推荐)
3.2 Spring IOC 容器实现
3.2.1 BeanFactory
基础IOC容器接口,提供基本的DI功能:
- 延迟初始化:只有使用时才创建Bean
- 适合资源受限环境
- 核心方法:
getBean(),containsBean(),isSingleton()
3.2.2 ApplicationContext
BeanFactory的扩展,提供更多企业级功能:
- 预初始化所有单例Bean
- 支持国际化、事件发布
- 集成AOP、事务管理等
- 常见实现类:
ClassPathXmlApplicationContext:基于类路径的XML配置AnnotationConfigApplicationContext:基于注解的配置WebApplicationContext:Web应用专用
3.3 Bean 生命周期管理
完整生命周期包含以下阶段:
- 实例化:调用构造函数创建对象
- 属性赋值:注入依赖属性
- 初始化:
- 调用
BeanNameAware接口方法 - 调用
BeanFactoryAware接口方法 - 调用
@PostConstruct注解方法 - 调用
InitializingBean.afterPropertiesSet() - 调用自定义init方法
- 调用
- 使用中:业务方法调用
- 销毁:
- 调用
@PreDestroy注解方法 - 调用
DisposableBean.destroy() - 调用自定义destroy方法
- 调用
3.4 依赖注入方式详解
3.4.1 XML配置方式
<bean id="userService" class="com.example.UserServiceImpl">
<property name="userDao" ref="userDao"/>
</bean>
<bean id="userDao" class="com.example.UserDaoImpl"/>
3.4.2 注解配置方式
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
// ...
}
@Repository
public class UserDaoImpl implements UserDao {
// ...
}
3.4.3 Java配置方式
@Configuration
public class AppConfig {
@Bean
public UserService userService() {
return new UserServiceImpl(userDao());
}
@Bean
public UserDao userDao() {
return new UserDaoImpl();
}
}
3.5 高级特性
3.5.1 自动装配
@Autowired:按类型自动装配@Qualifier:配合@Autowired指定具体Bean@Resource:JSR-250标准注解,可按名称或类型装配
3.5.2 作用域管理
singleton:默认,每个容器一个实例prototype:每次请求新实例request:每个HTTP请求新实例session:每个HTTP会话新实例application:ServletContext生命周期
3.5.3 条件化装配
@Conditional:基于条件创建Bean@Profile:环境相关的Bean配置
3.6 实际应用场景
3.6.1 服务层解耦
通过IOC容器管理Service及其依赖的DAO,实现层间解耦。
3.6.2 单元测试支持
可以轻松替换真实依赖为Mock对象进行测试。
3.6.3 插件式架构
通过配置不同的Bean实现,无需修改代码即可切换功能模块。
3.6.4 微服务配置
在Spring Cloud中,IOC容器管理各种微服务组件及其依赖关系。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)