第一幕:精子卵子结合(实例化)
-
操作:容器掏出反射大法
new Instance()
硬生生造出对象 -
黑科技:构造函数就像试管婴儿,用
@Autowired
能指定体位(构造器注入)
// 相当于此处有个隐形的 new YourBean();
第二幕:填鸭式教育(属性注入)
-
暴力操作:Spring用反射把
@Autowired
的依赖怼进对象 -
潜规则:私有字段被扒光(
field.setAccessible(true)
)
public class YourBean {
@Autowired // Spring:给老子进去吧你!
private Dependency dependency;
}
第三幕:身份证登记(Aware接口)
-
觉醒时刻:Bean突然意识到自己的身份
-
BeanNameAware
:知道自己叫"userService" -
BeanFactoryAware
:知道自己被哪个厂子(容器)管控
-
public class YourBean implements BeanNameAware {
@Override
public void setBeanName(String name) {
System.out.println("皇上,臣妾名叫" + name);
}
}
第四幕:美颜滤镜(BeanPostProcessor前置处理)
-
整容手术:
postProcessBeforeInitialization
给Bean微调 - 经典案例:AOP代理就是这时候给Bean套上替身(动态代理)
public class MyProcessor implements BeanPostProcessor {
public Object postProcessBeforeInitialization(Object bean, String name) {
// 此处可以给Bean打玻尿酸
return bean;
}
}
第五幕:成人礼三连击(初始化)
-
@PostConstruct:富二代的生日派对
@PostConstruct public void 土豪初始化() { System.out.println("开兰博基尼上学"); }
-
InitializingBean:官二代的入职培训
@Override public void afterPropertiesSet() { System.out.println("爹安排进国企"); }
-
XML配置的init-method:普通人的大学毕业
<bean init-method="搬砖准备" ... />
第六幕:套娃操作(BeanPostProcessor后置处理)
-
终极改造:
postProcessAfterInitialization
二次加工 - 杀手锏:这里才是AOP动态代理真正生效的地方!
public Object postProcessAfterInitialization(Object bean, String name) {
if(bean instanceof Service) {
return Proxy.newProxyInstance(...); // 套上代理马甲
}
return bean;
}
第七幕:社畜打工期(Bean可用)
-
高光时刻:此时Bean已经进入单例池(
SingletonObjects
) -
使用姿势:被各种
@Autowired
拉去当工具人
@Service
public class YourBean {
// 此时已经在996写bug了
}
第八幕:临终关怀(销毁)
-
@PreDestroy:金盆洗手宴
@PreDestroy public void 跑路前夜() { System.out.println("转移资产到海外"); }
-
DisposableBean:*坦白局
@Override public void destroy() { System.out.println("交代贪污赃款"); }
-
XML的destroy-method:普通人的遗嘱
<bean destroy-method="火化" ... />
生命周期流程图(厕所蹲坑记忆版)
new对象 → 填鸭式注入 → 领身份证 → 美颜滤镜 →
成人礼三连 → 套娃加工 → 打工 → 火葬场
彩蛋:特殊死亡情况
- 原型Bean(@Scope(“prototype”)):用后即焚,Spring不管销毁
- 容器关闭:
ctx.close()
触发集体火化 - JVM退房:直接拉闸断电,没机会执行destroy
下次面试被问到,你就翘着二郎腿说:“Spring Bean的一生啊,比杨超越的锦鲤人生还跌宕起伏~”