Spring核心概念
Spring框架采用模块化设计,包含核心容器(Core Container)、AOP、数据访问(DataAccess)等六大模块。其核心思想是控制反转(IOC)和依赖注入(DI),通过IOC容器管理Bean的生命周期。Bean有三种实例化方式:构造方法、静态工厂和实例工厂。FactoryBean接口可实现复杂对象的定制创建。Bean生命周期包括实例化、属性赋值、初始化、使用和销毁五个阶段,可通过X
Spring Framework系统架构

Data Access:数据访问
Data Integration:数据集成
AOP:面向切面编程
Aspects:AOP思想实现
Core Container:核心容器
Test:单元测试与集成测试
核心概念:
IOC(Inversion of Control)控制反转:
作用:
对象的创建控制权由程序员转移到外部。
Spring技术对IOC思想进行了实现:
1.Spring提供IOC容器,用来充当IOC思想的外部
2.IOC容器负责对象的创建,初始化等一系列工作。被管理或创建的对象在IOC容器中被统称为Bean。
DI(Dependency Injection)依赖注入:
作用:
容器中建立bean与bean之间的依赖关系的整个过程。
目标:充分解耦
1.使用IOC容器管理bean(IoC)
2.在IoC容器内将有依赖关系的bean进行关系绑定(DI)
最终效果:
使用对象时不仅可以直接从IoC容器中获取,并且获取到的bean已经绑定了所有的依赖关系。
DI步骤:
1)删除使用new创建对象代码
2)提供依赖对象对应的setter方法
3)配置service与dao之间的关系
property标签表示配置当前bean的属性
name属性表示配置哪一个具体的属性
ref属性表示参照哪个bean
Bean:
概念:
由Spring容器管理的对象实例,是应用程序的构建块。Bean的创建、依赖注入和生命周期均由Spring IoC(控制反转)容器控制。
别名配置:
name,可定义多个,使用“,;空格”分隔
作用范围配置:
singleton:单例(默认);prototype:非单例
适合交给容器管理的bean:表现层对象,业务层对象,数据层对象,工具对象
不适合交给容器管理的bean:封装实体的域对象。
实例化bean的三种方式:
1.构造方法(常用)
使用默认的构造方法创建Bean实例,适用于无参构造或依赖注入场景。(无参构造方法不存在会抛出异常)在Spring配置文件中直接定义Bean:
<bean id="exampleBean" class="com.example.ExampleBean"/>
对应Java类需有无参构造方法:
public class ExampleBean {
public ExampleBean() {}
}
2.静态方法(了解)
通过类的静态方法返回Bean实例,适用于复杂初始化逻辑。配置时指定工厂类和方法名:
<bean id="staticFactoryBean"
class="com.example.StaticFactory"
factory-method="createInstance"/>
静态工厂类实现示例:
public class StaticFactory {
public static ExampleBean createInstance() {
return new ExampleBean();
}
}
3.实例工厂(了解)
先实例化工厂对象,再调用其非静态方法生成Bean。需先配置工厂Bean,再引用其方法:
<bean id="instanceFactory" class="com.example.InstanceFactory"/>
<bean id="instanceBean"
factory-bean="instanceFactory"
factory-method="getBean"/>
实例工厂类实现示例:
public class InstanceFactory {
public ExampleBean getBean() {
return new ExampleBean();
}
}
4.FactoryBean
FactoryBean 是 Spring 框架中的一个特殊接口,用于创建复杂的 Bean 实例。当需要定制化 Bean 的创建逻辑时,可以实现 FactoryBean 接口,而不是直接通过传统的 Bean 定义方式。
三个核心方法:
public interface FactoryBean<T> {
T getObject() throws Exception;
Class<?> getObjectType();
boolean isSingleton();
}
getObject():返回由 FactoryBean 创建的 Bean 实例。getObjectType():返回创建的对象类型。isSingleton():指示创建的 Bean 是否为单例。
实现 FactoryBean 的示例
以下是一个简单的 FactoryBean 实现,用于创建自定义的 Bean 实例:
public class CustomFactoryBean implements FactoryBean<CustomObject> {
@Override
public CustomObject getObject() throws Exception {
return new CustomObject();
}
@Override
public Class<?> getObjectType() {
return CustomObject.class;
}
@Override
public boolean isSingleton() {
return true;
}
}
配置 FactoryBean 的 Bean 定义
在 Spring 配置文件中,FactoryBean 的 Bean 定义与普通 Bean 类似。例如,在 XML 配置中:
<bean id="customBean" class="com.example.CustomFactoryBean" />
此时,Spring 容器会通过 CustomFactoryBean 的 getObject() 方法创建实际的 Bean 实例。
获取 FactoryBean 创建的 Bean
从 Spring 容器中获取 FactoryBean 创建的 Bean 时,直接使用 Bean 的 ID 即可:
ApplicationContext context = ...;
CustomObject customObject = context.getBean("customBean", CustomObject.class);
获取 FactoryBean 本身
如果需要获取 FactoryBean 实例本身(而非它创建的 Bean),可以在 Bean ID 前添加 & 符号:
FactoryBean<?> factoryBean = context.getBean("&customBean", FactoryBean.class);
FactoryBean 的使用场景
- 创建复杂的 Bean 实例,如数据库连接池、线程池等。
- 需要动态生成 Bean 实例的逻辑。
- 封装第三方库的初始化过程。
通过 FactoryBean,可以灵活控制 Bean 的创建过程,实现更高级的依赖注入功能。
bean的生命周期 :
bean从创建到销毁的整体过程。
1)实例化 2)属性赋值 3)初始化 4)使用 5)销毁
bean生命周期控制:
在bean创建后到销毁前做的一些事情
<!-- XML配置示例 -->
<bean id="exampleBean"
class="com.example.ExampleBean"
init-method="customInit"
destroy-method="customDestroy"/>
在service层实现方法init(),destory()
在main方法中调用close()方法/registerShutdownHook()
接口控制:实现InitializingBean,DisposableBean
初始化容器:
1.创建对象(内存分配)
2.执行构造方法
3.执行属性注入(set操作)
4.执行bean初始化方法
使用bean:
执行业务操作
关闭/销毁容器:
执行bean销毁方法
bean销毁时机:
容器关闭前触发bean的销毁
1)手工关闭容器:对于单例(singleton)作用域的bean,当Spring容器关闭时(如调用ConfigurableApplicationContext.close()),容器会触发所有单例bean的销毁方法。可以通过@PreDestroy注解或实现DisposableBean接口定义销毁逻辑。
@Component
public class ExampleBean {
@PreDestroy
public void cleanup() {
System.out.println("Bean销毁前的清理工作");
}
}
2)注册关闭钩子,在虚拟机退出前先关闭容器再退出虚拟机
ConfigurableApplicationContext接口的registerShutdownHook()操作。
更多推荐


所有评论(0)