java spring框架中,bean的生命周期是什么

java spring框架中,bean的生命周期是什么,第1张

Spring Bean的完整生命周期从创建Spring容器开始,直到最终Spring容器销毁Bean。

Bean的完整生命周期经历了各种方法调用,这些方法可以划分为以下几类:

Bean自身的方法:这个包括了Bean本身调用的方法和通过配置文件中<bean>的init-method和destroy-method指定的方法。

Bean级生命周期接口方法:这个包括了BeanNameAware、BeanFactoryAware、InitializingBean和DiposableBean这些接口的方法。

容器级生命周期接口方法:这个包括了InstantiationAwareBeanPostProcessor 和 BeanPostProcessor 这两个接口实现,一般称它们的实现类为“后处理器”。

工厂后处理器接口方法:这个包括了AspectJWeavingEnabler,ConfigurationClassPostProcessor, CustomAutowireConfigurer等等非常有用的工厂后处理器接口的方法。工厂后处理器也是容器级的。在应用上下文装配配置文件之后立即调用。

参考资料

生命周期bean[引用时间2018-1-9]

Bean的生命周期指的是从一个普通的Java类变成Bean的过程。

对prototype bean来说,当用户getBean获得prototype bean的实例后,IOC容器就不再对当前实例进行管理,而是把管理权交由用户,此后再getBean生成的是新的实例。

常用接口说明:

1、BeanNameAware该接口只有一个方法setBeanName(String name),用来获取bean的 id或者name。

2、BeanFactoryAware该接口只有一个方法setBeanFactory(BeanFactory beanFactory),用来获取 当前环境中的BeanFactory。

3、ApplicationContextAware该接口只有一个方法setApplicationContext(ApplicationContext applicationContext),用来获取,当前环境中的ApplicationContext获取到IOC容器之后,可以对beans进行修改等 *** 作。

servlet的生命周期

servlet有良好的生存期的定义,包括如何加载、实例化、初始化、处理客户端请求以及如何被移除。这个生存期由javaxservletServlet接口的init,service和destroy方法表达。

1、加载和实例化

容器负责加载和实例化一个servlet。实例化和加载可以发生在引擎启动的时候,也可以推迟到容器需要该servlet为客户请求服务的时候。

首先容器必须先定位servlet类,在必要的情况下,容器使用通常的Java类加载工具加载该servlet,可能是从本机文件系统,也可以是从远程文件系统甚至其它的网络服务。容器加载servlet类以后,它会实例化该类的一个实例。需要注意的是可能会实例化多个实例,例如一个servlet类因为有不同的初始参数而有多个定义,或者servlet实现SingleThreadModel而导致容器为之生成一个实例池。

2、初始化

servlet加载并实例化后,容器必须在它能够处理客户端请求前初始化它。初始化的过程主要是读取永久的配置信息,昂贵资源(例如JDBC连接)以及其它仅仅需要执行一次的任务。通过调用它的init方法并给它传递唯一的一个(每个servlet定义一个)ServletConfig对象完成这个过程。给它传递的这个配置对象允许servlet访问容器的配置信息中的名称-值对(name-value)初始化参数。这个配置对象同时给servlet提供了访问实现了ServletContext接口的具体对象的方法,该对象描述了servlet的运行环境。

21初始化的错误处理

在初始化期间,servlet实例可能通过抛出UnavailableException 或者 ServletException异常表明它不能进行有效服务。如果一个servlet抛出一个这样的异常,它将不会被置入有效服务并且应该被容器立即释放。在此情况下destroy方法不会被调用因为初始化没有成功完成。在失败的实例被释放后,容器可能在任何时候实例化一个新的实例,对这个规则的唯一例外是如果失败的servlet抛出的异常是UnavailableException并且该异常指出了最小的无效时间,那么容器就会至少等待该时间指明的时限才会重新试图创建一个新的实例。

22、工具因素

当工具(注:根据笔者的理解,这个工具可能是应用服务器的某些检查工具,通常是验证应用的合法性和完整性)加载和内省(introspect)一个web应用时,它可能加载和内省该应用中的类,这个行为将触发那些类的静态初始方法被执行,因此,开发者不能假定只要当servlet的init方法被调用后它才处于活动容器运行状态(active container runtime)。作为一个例子,这意味着servlet不能在它的静态(类)初始化方法被调用时试图建立数据库连接或者连接EJB容器。

3、处理请求

在servlet被适当地初始化后,容器就可以使用它去处理请求了。每一个请求由ServletRequest类型的对象代表,而servlet使用ServletResponse回应该请求。这些对象被作为service方法的参数传递给servlet。在>

1存储区域不同:静态变量存储在静态存储区,普通变量存储在堆中;\x0d\2静态变量与类相关,普通变量则与实例相关,说细一点:\x0d\class Demo {\x0d\public static String a;\x0d\public String b;\x0d\public static void main(String[] args) {\x0d\ Demo d = new Demo();\x0d\ da; // 警告,虽然可以通过编译,但没有意义\x0d\ db; // 正确\x0d\ Demoa; // 对static变量的正确引用\x0d\ Demob; // 错误\x0d\}\x0d\3内存分配方式不同。static字段对每个类来说都只有一份,无论你创建多少对象,该static区域都只有一份,它对于这些对象来说是共享的;而非static字段,因为其从属于对象,因此每有一个对象,就会为该变量申请一个存储空间;\x0d\4生命周期不同。从程序运行开始,static域就已经确定下来,因此在没有创建对象之前,就可以引用该区域变量及函数,而非static域的变量及函数,必须等实例化之后才可以通过对象来调用。\x0d\5理解了this之后,更能体会到static的含义。static方法就是没有this的方法,这也就是为什么在static方法中不能引用非static变量,因为该方法内没有隐含的this,编译器无从知道这个变量是属于哪一个类的。

以上就是关于java spring框架中,bean的生命周期是什么全部的内容,包括:java spring框架中,bean的生命周期是什么、springbean生命周期详解、java servlet的生命周期,比cgi有什么优点等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9602161.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存