bean的作用域
在Spring中可以通过配置bean标签的scope属性来指定bean的作用域范围
单实例 scope="singleton" 初始化的时候创建
多实例 scope="prototype" 获取bean的时候创建
<bean id="orders" class="com.atguigu.spring6.iocxml.scope.Orders" scope="singleton"></bean>
主意 scope 默认值是单实例 scope="singleton"
public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("bean-scope.xml"); Orders orders = context.getBean("orders", Orders.class); System.out.println(orders); Orders orders1 = context.getBean("orders", Orders.class); System.out.println(orders1); }
如果是单实例 输出2 次结果是一样的
如果是多实例 输出结果不一样
bean生命周期
-
bean对象创建(调用无参构造器)
-
给bean对象设置属性
-
bean的后置处理器(初始化之前)
-
bean对象初始化(需在配置bean时指定初始化方法)
-
bean的后置处理器(初始化之后)
-
bean对象就绪可以使用
-
bean对象销毁(需在配置bean时指定销毁方法)
-
IOC容器关闭
在User中
bean对象创建,调用无参数构造.
用set方法给bean对象设置属性值
在测试中 完成初始化
对象可以使用了
对象销毁
public class User { //无参数构造 public User() { System.out.println("1 bean对象创建,调用无参数构造"); } //初始化的方法 public void initMethod() { System.out.println("4 bean对象初始化,调用指定的初始化的方法"); } //销毁的方法 public void destroyMethod() { System.out.println("7 bean对象销毁,调用指定的销毁的方法"); } private String name; public String getName() { return name; } public void setName(String name) { System.out.println("2 给bean对象设置属性值"); this.name = name; }
public class TestUser { public static void main(String[] args) { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("bean-life.xml"); User user = context.getBean("user", User.class); System.out.println("6 bean对象创建完成了,可以使用了"); System.out.println(user); context.close(); //销毁 } }
可以发现
3 bean后置处理器,初始化之前执行
5 bean后置处理器,初始化之后执行
不见了
@Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { System.out.println("3 bean后置处理器,初始化之前执行"); System.out.println(beanName+"::"+bean); return bean; } @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { System.out.println("5 bean后置处理器,初始化之后执行"); System.out.println(beanName+"::"+bean); return bean; }
1 <!-- bean的后置处理器要放入IOC容器才能生效 --> 2 <bean id="myBeanPost" class="com.atguigu.spring6.iocxml.life.MyBeanPost"/>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构