「java单例生命周期」java中一个对象的生命周期
今天给各位分享java单例生命周期的知识,其中也会对java中一个对象的生命周期进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、Bean的生命周期
- 2、Spring生命周期中那些Bean级容器级生命周期到底都有什么用
- 3、java在什么情况下会出现内存泄露
- 4、Java使用单例模式时,创建的对象会不会被垃
- 5、java静态单例的生命周期是多久?? 在一个web应用里面能与web应用同生命周期不? 有没有可信的文献参考?
- 6、spring生命周期是什么?
Bean的生命周期
当一个对象被Spring所管理,那么它的生命周期就完全由容器所控制。Bean的生命周期从大的方面来分可以分为以下四个阶段:
1. 实例化
2. 属性赋值
3. 初始化
4. 销毁
这样的划分是比较笼统的,接下来就从细分的角度来的Bean的生命周期做一个详细的阐述。
我们知道在Java中万物皆对象,而在Spring中被Spring管理的对象被称为bean。那么普通的对象是如何变成bean的呢?
首先,Spring会通过BeanDefinitionReader 从XML、注解、配置类或者是其他方式,读取Bean的定义信息,来生成一个 BeanDefinition ,BeanDefinition接口是Spring对Bean的抽象,是用来描述Bean的。其中包含了如:bean名称、是否是单例的、是否懒加载等描述信息。
有了BeanDefinition之后就可以准备生成实例化的对象了,但在这之前还有一步。就是一个对象它可能会有多个构造方法,那Spring如何知道你要生成哪一个构造方法的对象呢?所以,Spring需要 推断构造方法 。
有了构造方法之后,就可以实例化对象了。当用户向容器请求一个尚未初始化的bean时,或初始化bean的时候需要注入另一个尚未初始化的依赖时,容器就会调用 createBean 进行实例化。注意:此处生成的对象都是空对象,也就是说它的属性都是空的,并没有进行依赖注入。
在这一阶段,Spring就会给实例化出来的对象进行赋值。所以就要用到第一步生成的BeanDefinition,Spring根据BeanDefinition中的信息进行依赖注入。 并且通过BeanWrapper提供的设置属性的接口完成依赖注入。 而在这一步也涉及到了循环依赖这一问题。
Aware类型的接口的作用就是让我们能够拿到Spring容器中的一些资源。如果一个Bean实现了该接口,那么当该Bean被spring初始化时,spring会向该Bean注入相关资源(就是会回调接口中的方法)。以下是对Aware接口作用的一个示例:
可以看到,当Spring容器初始化,UserService被初始化,也就调用了UserService所实现的BeanNameAware接口的setBeanName方法。在Spring中这样的Aware类型的接口还有很多,以下是常用的Aware相关接口作用说明:
经过以上的几个步骤,bean对象就已经被正确构造了。但是如果你想要对象被使用之前,在进行一些自定义的处理,就可以定制一些初始化方法。初始化方法调用的流程是这样的:
经过以上的工作后,Bean将一直驻留在应用上下文中给应用使用,直到应用上下文被销毁。Bean的销毁有两个方法:执行DisposableBean的destroy方法、执行当前对象定义的destroy方法。这两个方法的作用是相同的,都是在Bean实例销毁前执行的方法。
至此,SpringBean的生命周期就结束了。总的来说,Bean的生命周期大的方面可以分为:
实例化 ---- 属性赋值 ----- 初始化 ------ 销毁
细分可以如下图所示:
Spring生命周期中那些Bean级容器级生命周期到底都有什么用
Spring作为当前Java最流行、最强大的轻量级框架,受到了程序员的热烈欢迎。准确的了解Spring Bean的生命周期是非常必要的。我们通常使用ApplicationContext作为Spring容器。这里,我们讲的也是 ApplicationContext中Bean的生命周期。而实际上BeanFactory也是差不多的,只不过处理器需要手动注册。
一、生命周期流程图:
Spring Bean的完整生命周期从创建Spring容器开始,直到最终Spring容器销毁Bean,这其中包含了一系列关键点。
若容器注册了以上各种接口,程序那么将会按照以上的流程进行。下面将仔细讲解各接口作用。
二、各种接口方法分类
Bean的完整生命周期经历了各种方法调用,这些方法可以划分为以下几类:
1、Bean自身的方法:这个包括了Bean本身调用的方法和通过配置文件中bean的init-method和destroy-method指定的方法
2、Bean级生命周期接口方法:这个包括了BeanNameAware、BeanFactoryAware、InitializingBean和DiposableBean这些接口的方法
3、容器级生命周期接口方法:这个包括了InstantiationAwareBeanPostProcessor 和 BeanPostProcessor 这两个接口实现,一般称它们的实现类为“后处理器”。
4、工厂后处理器接口方法:这个包括了AspectJWeavingEnabler, ConfigurationClassPostProcessor, CustomAutowireConfigurer等等非常有用的工厂后处理器接口的方法。工厂后处理器也是容器级的。在应用上下文装配配置文件之后立即调用。
java在什么情况下会出现内存泄露
内存泄露就是指一个不再被程序使用的对象或变量一直被占据在内存中。java中的内存泄露的情况:
1.长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露,例如,缓存系统,我们加载了一个对象放在缓存中(例如放在一个全局map对象中),然后一直不再使用它,这个对象一直被缓存引用,但却不再被使用。
2.集合类,而如果集合类是全局性的变量(比如类中的静态属性,全局性的map等即有静态引用或final一直指向它),那么没有相应的删除机制,很可能导致集合所占用的内存只增不减,因此提供这样的删除机制或者定期清除策略非常必要。
3.单例模式。不正确使用单例模式是引起内存泄露的一个常见问题,单例对象在被初始化后将在JVM的整个生命周期中存在(以静态变量的方式),如果单例对象持有外部对象的引用,那么这个外部对象将不能被jvm正常回收,导致内存泄露
Java使用单例模式时,创建的对象会不会被垃
一般单例的生命周期和服务,或者应用的生命周期一样长,因为不管是懒汉模式,还是饿汉模式,都是static的,这些静态变量是被存储在方法区,方法区(一般又被称永久代),而一般来说方法区一般不垃圾回收(java虚拟机规范不要求虚拟机在方法区进行垃圾回收)
java静态单例的生命周期是多久?? 在一个web应用里面能与web应用同生命周期不? 有没有可信的文献参考?
web应用是中间件/组件的容器,而java的class不过只是中间件而已,应该不能同生命周期
spring生命周期是什么?
spring生命周期只有3个:
1、Spring对Bean进行实例化(相当于程序中的new Xx())。
2、Spring将值和Bean的引用注入进Bean对应的属性中。
3、如果Bean实现了BeanFactoryAware接口,Spring将调用setBeanDactory(BeanFactory bf)方法并把BeanFactory容器实例作为参数传入。
在spring2.0之前bean只有2种作用域即:singleton(单例)、non-singleton(也称prototype),Spring2.0以后,增加了session、request、global session三种专用于Web应用程序上下文的Bean。因此,默认情况下Spring2.0现在有五种类型的Bean。
历史背景:
生命周期评价起源于20世纪60年代,由于能源危机的出现和对社会产生的巨大冲击,美国和英国相继开展了能源利用的深入研究,生命周期评价的概念和思想逐步形成。值得说明的是,生命周期评价后来在生态环境领域有着广泛的应用。
关于java单例生命周期和java中一个对象的生命周期的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。