网站建设与网页设计实训报告,水滴信用企业查询官网,自己在网上怎么做网站,wordpress移动端导航菜单目录
一.spring管理JavaBean的初始化过程#xff08;生命周期#xff09;
Spring Bean的生命周期#xff1a;
二.spring的JavaBean管理中单例模式及原型#xff08;多例#xff09;模式 2.1 . 默认为单例#xff0c;但是可以配置多例 2.2.举例论证 2.2.1 默认单例 2.2…目录
一.spring管理JavaBean的初始化过程生命周期
Spring Bean的生命周期
二.spring的JavaBean管理中单例模式及原型多例模式 2.1 . 默认为单例但是可以配置多例 2.2.举例论证 2.2.1 默认单例 2.2.2 设置多例 2.2.3单例与多例的初始化的时间点
三.总结 一.spring管理JavaBean的初始化过程生命周期 在Spring框架中Bean的生命周期是指从它被创建、初始化到最终被销毁的整个过程。 需要注意的是Bean的销毁并不是由Java的垃圾回收器自动处理的而是由Spring容器负责管理和销毁的。 下面一张图就是bean的整个生命周期图它的一个初始化过程 Spring Bean的生命周期 1通过XML、Java annotation注解以及Java Configuration配置类 等方式配置JavaBean现在我用的是xml配置文件的方式 2BeanDefinitionReader解析Bean的定义。在Spring容器启动过程中 会将Bean解析成Spring内部的BeanDefinition结构 理解为将spring.xml中的bean标签转换成BeanDefinition结构 有点类似于XML解析 3BeanDefinition包含了很多属性和方法。例如id、class类名、 scope、ref依赖的bean等等。其实就是 将bean例如bean的定义信息 存储到这个对应BeanDefinition相应的属性中,最终得到ListBeanDefinition 4BeanFactoryPostProcessor是Spring容器功能的扩展接口。JavaBean初始化之前 先执行自己的业务 5BeanFactorybean工厂。它按照我们的要求生产我们需要的各种各样的bean。 6Aware感知接口在实际开发中经常需要用到Spring容器本身的功能资源 例如BeanNameAware、ApplicationContextAware等等 BeanDefinition 实现了 BeanNameAware、ApplicationContextAware 7BeanPostProcessor后置处理器。在Bean对象实例化和引入注入完毕后 8destory销毁 二.spring的JavaBean管理中单例模式及原型多例模式 2.1 . 默认为单例但是可以配置多例 单例的优点节约内存缺点有变量污染JavaBean是跟着spring上下文初始化的容器生对象生容器死对象死因为单例只创建一次所以最开始的时候就创建 多例的优点无变量污染缺点及其消耗内存JavaBean是使用的时候才会创建销毁跟着jvm走 举例说明假如你有两个儿子他们两个都想要一个玩具车。 案例一买一个哥哥上午玩弟弟下午玩但是上午哥哥玩的时候如果玩具脏了 刮花了那么对于弟弟而言这个玩具已经不是原有车的状态但是给我们省钱了》单例 案例二买两个一人一个这样就不存在污染各玩各的但是我们的钱包就扁了》多例 2.2.举例论证 2.2.1 默认单例 这个就是那辆车bean对象,这里设了一个变量属性 num 来验证是不是单例变量改变了
package com.zking.beanlife;import java.util.List;public class ParamAction {private int age;private String name;private ListString hobby;private int num 1;// private UserBiz userBiz new UserBizImpl1();public ParamAction() {super();}public ParamAction(int age, String name, ListString hobby) {super();this.age age;this.name name;this.hobby hobby;}public void execute() {// userBiz.upload();// userBiz new UserBizImpl2();System.out.println(this.num this.num);System.out.println(this.name);System.out.println(this.age);System.out.println(this.hobby);}
} 再模拟方法数据进行测试
package com.zking.beanlife;public class InstanceFactory {public void init() {System.out.println(初始化方法);}public void destroy() {System.out.println(销毁方法);}public void service() {System.out.println(业务方法);}
} 然后进行xml文件配置 最后前台测试是否默认为单例模式并且变量被污染了num值发生了变化说明被污染了默认为单例模式 2.2.2 设置多例 原来的代码不变我们再xml配置文件中选择多例 前台测试结果发现num值没有被污染 2.2.3单例与多例的初始化的时间点 当是多例的时候不会初始化 而当单例的时候会初始化 三.总结
单例和多例的选择也需要考虑性能和资源消耗。单例可以节省资源但可能存在线程安全问题多例可以保证独立性但会增加对象创建和销毁的开销。单例适合那些无状态或者线程安全的Bean多例适合那些有状态的Bean或者需要每次请求都创建一个新实例的情况