首页 > 其他分享 >【01期】你能说说Spring框架中Bean的生命周期吗?

【01期】你能说说Spring框架中Bean的生命周期吗?

时间:2024-11-14 21:18:19浏览次数:3  
标签:01 配置文件 Spring HelloWorld Bean 调用 nbsp

前言:在当今技术快速迭代的大背景下,每位开发者都在不懈努力,学习最新的技术和框架,只为能在众多求职者中脱颖而出,获得理想中的大厂Offer。然而,面对网上海量且质量参差不齐的面试资料,许多朋友可能会感到迷茫和困惑。为了帮助大家更高效地准备面试,我精心搜集并整理了一份涵盖各大互联网公司Java面试真题及其详尽解答的资料包。这份资料不仅包含了基础语法、数据结构与算法等基础知识,还深入探讨了Spring Boot、MyBatis等主流框架的工作原理。现在,我决定将这份珍贵的资源免费分享给每一位渴望提升自己的Java开发者。如果你也需要这样一份系统全面的面试准备资料,请在下方评论区留言“666”获取下载链接。让我们携手共进,向着更高的目标迈进!

2b7ac3c7cddf811380028dc957a0fc28.jpeg

首先简单说一下(以下为一个回答的参考模板)

1、实例化一个Bean--也就是我们常说的new;


2、按照Spring上下文对实例化的Bean进行配置--也就是IOC注入;

3、如果这个Bean已经实现了BeanNameAware接口,会调用它实现的setBeanName(String)方法,此处传递的就是Spring配置文件中Bean的id值

4、如果这个Bean已经实现了BeanFactoryAware接口,会调用它实现的setBeanFactory(setBeanFactory(BeanFactory)传递的是Spring工厂自身(可以用这个方式来获取其它Bean,只需在Spring配置文件中配置一个普通的Bean就可以);

5、如果这个Bean已经实现了ApplicationContextAware接口,会调用setApplicationContext(ApplicationContext)方法,传入Spring上下文(同样这个方式也可以实现步骤4的内容,但比4更好,因为ApplicationContext是BeanFactory的子接口,有更多的实现方法);

6、如果这个Bean关联了BeanPostProcessor接口,将会调用postProcessBeforeInitialization(Object obj, String s)方法,BeanPostProcessor经常被用作是Bean内容的更改,并且由于这个是在Bean初始化结束时调用那个的方法,也可以被应用于内存或缓存技术;

7、如果Bean在Spring配置文件中配置了init-method属性会自动调用其配置的初始化方法。

8、如果这个Bean关联了BeanPostProcessor接口,将会调用postProcessAfterInitialization(Object obj, String s)方法、;

注:以上工作完成以后就可以应用这个Bean了,那这个Bean是一个Singleton的,所以一般情况下我们调用同一个id的Bean会是在内容地址相同的实例,当然在Spring配置文件中也可以配置非Singleton,这里我们不做赘述。

9、当Bean不再需要时,会经过清理阶段,如果Bean实现了DisposableBean这个接口,会调用那个其实现的destroy()方法;

10、最后,如果这个Bean的Spring配置中配置了destroy-method属性,会自动调用其配置的销毁方法。


结合代码理解一下

1、Bean的定义

Spring通常通过配置文件定义Bean。如:

<?xml&nbsp;version=”1.0″&nbsp;encoding=”UTF-8″?>

<beans&nbsp;xmlns=”http://www.springframework.org/schema/beans”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://www.springframework.org/schema/beans&nbsp;http://www.springframework.org/schema/beans/spring-beans-2.0.xsd”>

<bean&nbsp;id=”HelloWorld”&nbsp;class=”com.pqf.beans.HelloWorld”>
&nbsp;&nbsp;&nbsp;&nbsp; <property&nbsp;name=”msg”>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <value>HelloWorld </value>
&nbsp;&nbsp;&nbsp;&nbsp; </property>
</bean>

</beans>

这个配置文件就定义了一个标识为 HelloWorld 的Bean。在一个配置文档中可以定义多个Bean。


2、Bean的初始化

有两种方式初始化Bean。

1、在配置文档中通过指定init-method 属性来完成

在Bean的类中实现一个初始化Bean属性的方法,如init(),如:

public&nbsp; class&nbsp;HelloWorld{
&nbsp;&nbsp;&nbsp; public&nbsp; String&nbsp;msg= null;
&nbsp;&nbsp;&nbsp; public&nbsp; Date&nbsp; date= null;

&nbsp;&nbsp;&nbsp;&nbsp; public&nbsp;void&nbsp;init()&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg=”HelloWorld”;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date= new&nbsp; Date();
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;……&nbsp;
}

然后,在配置文件中设置init-mothod属性:

2、实现 org.springframwork.beans.factory.InitializingBean接口

Bean实现InitializingBean接口,并且增加 afterPropertiesSet() 方法:

public&nbsp; class&nbsp;HelloWorld&nbsp;implement&nbsp;InitializingBean&nbsp;{
&nbsp;&nbsp;&nbsp; public&nbsp; String&nbsp;msg= null;
&nbsp;&nbsp;&nbsp; public&nbsp; Date&nbsp; date= null;

&nbsp;&nbsp;&nbsp; public&nbsp;void&nbsp;afterPropertiesSet()&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg= "向全世界问好!";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date= new&nbsp; Date();
&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;……&nbsp;
}

那么,当这个Bean的所有属性被Spring的BeanFactory设置完后,会自动调用afterPropertiesSet()方法对Bean进行初始化,于是,配置文件就不用指定 init-method属性了。


3、Bean的调用

有三种方式可以得到Bean并进行调用:

1、使用BeanWrapper
HelloWorld&nbsp;hw= new&nbsp;HelloWorld();
BeanWrapper&nbsp;bw= new&nbsp;BeanWrapperImpl(hw);
bw.setPropertyvalue(”msg”,”HelloWorld”);
system.out.println(bw.getPropertyCalue(”msg”));
2、使用BeanFactory
InputStream&nbsp;is= new&nbsp;FileInputStream(”config.xml”);
XmlBeanFactory&nbsp;factory= new&nbsp;XmlBeanFactory(is);
HelloWorld&nbsp;hw=(HelloWorld)&nbsp;factory.getBean(”HelloWorld”);
system.out.println(hw.getMsg());
3、使用ApplicationConttext
ApplicationContext&nbsp;actx= new&nbsp;FleSystemXmlApplicationContext(”config.xml”);
HelloWorld&nbsp;hw=(HelloWorld)&nbsp;actx.getBean(”HelloWorld”);
System. out.println(hw.getMsg());


4、Bean的销毁

1、使用配置文件中的 destory-method 属性

与初始化属性 init-methods类似,在Bean的类中实现一个撤销Bean的方法,然后在配置文件中通过 destory-method指定,那么当bean销毁时,Spring将自动调用指定的销毁方法。

2、实现 org.springframwork.bean.factory.DisposebleBean接口

如果实现了DisposebleBean接口,那么Spring将自动调用bean中的Destory方法进行销毁,所以,Bean中必须提供Destory方法。

图解


def44128c9bfcb8ecad674fcf439020d.jpeg

如果你也需要这样一份系统全面的面试准备资料,请在下方评论区留言“666”获取下载链接。让我们携手共进,向着更高的目标迈进!


标签:01,配置文件,Spring,HelloWorld,Bean,调用,nbsp
From: https://blog.csdn.net/2403_88996764/article/details/143781157

相关文章

  • [GXOI/GZOI2019] 旅行者
    算法\(O(Tn\log^2n)\)对于\(\rm{Subtask}\text{}1\),直接跑\(n\)遍\(\rm{dijkstra}\)就可以,这是\(O(Tn^2\logn)\)的对于\(\rm{Subtask}\text{}1\)的优化:显然的,每次\(\rm{dijkstra}\)只需要跑到离自己最近的感兴趣的点即可,因为后面的不可能......
  • EESA01 Introduction to Environmental
    EESA01IntroductiontoEnvironmentalScienceLaboratoryManualFall2024Lab2:WeatherandClimateDataIntroductioInlectures,wewillsoonbegindiscussingtheEarth’senergybalance,thebasicsofclimate,andotheratmosphericphenomena.Thislabwil......
  • 轻松掌握Spring:快速入门指南 (免费学习!!!)
    目录一、Spring简单介绍二、Java反射机制三、SpringIOC机制3.1使用构造器来实例化Bean3.2使用静态工厂实例化Bean3.3使用实例工厂来实例化Bean3.4SpringIOC实现原理3.5SpringBean的作用域四、SpringAOP机制4.1相关概念4.2利用proxy实现AOP功能4.3利用......
  • 30道Spring高频面试题,学完吊打面试官(实用干货!!!)
    1、什么是Spring框架?Spring框架有哪些主要模块?答:Spring框架是一个为Java应用程序的开发提供了综合、广泛的基础性支持的Java平台。Spring帮助开发者解决了开发中基础性的问题,使得开发人员可以专注于应用程序的开发。Spring框架本身亦是按照设计模式精心打造,这使得我们可......
  • IDEA 如何手动创建spring boot工程
    步骤创建Maven工程引入依赖提供启动类一,创建maven工程newModules选择Maven起名选择骨架quickstart检查maven工程坐标一般不用改二,引入依赖坐标打开pom文件1,让当前工程继承一个副工程<parent><groupId>org.springframework.boot</groupId><artifactId>spring-......
  • SpringBoot快速入门
    一、SpringBoot简介SpringBoot是由Pivotal团队提供的全新框架,旨在简化Spring应用的初始搭建以及开发过程。它基于SpringFramework构建,但并不是Spring的替代者或精简版本,而是为了让程序员更好地使用Spring。SpringBoot通过提供默认配置和“习惯优于配置”的理念,使得开发者......
  • Reverse and Add UVA - 10018
    //ReverseandAddUVA-10018.cpp:此文件包含"main"函数。程序执行将在此处开始并结束。///*https://vjudge.net/problem/UVA-10018#author=md_bayazidThe“reverseandadd”methodissimple:chooseanumber,reverseitsdigitsandaddittotheoriginal.I......
  • 企业级工位管理:Spring Boot技术突破
    2相关技术2.1MYSQL数据库MySQL是一个真正的多用户、多线程SQL数据库服务器。是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常适用于Web站点或者其他......
  • 工位管理优化:Spring Boot企业级系统
    3系统分析3.1可行性分析通过对本企业级工位管理系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。3.1.1技术可行性本企业级工位管理系统采用SSM框架,JAVA作为开发语言,是基于WEB平台的......
  • 基于SpringBoot的信息技术知识竞赛系统
    关注底部领取源码源码编号:S321源码名称:基于SpringBoot的信息技术知识竞赛系统用户类型:双角色,用户、管理员主要技术:Java、Vue、ElementUl、SpringBoot运行环境:Windows/Mac、JDK1.8及以上运行工具:IDEA/Eclipse数 据 库:MySQL5.7及以上版本数据库表数量:16张表是否有......