当前位置: 首页 > news >正文

网站建设销售人才简历铜川做网站的公司电话

网站建设销售人才简历,铜川做网站的公司电话,wordpress手游,wordpress 取消标签一、Bean 的生命周期 Spring 其实就是一个管理 Bean 对象的工厂#xff0c;它负责对象的创建#xff0c;对象的销毁等 所谓的生命周期就是#xff1a;对象从创建开始到最终销毁的整个过程 什么时候创建 Bean 对象#xff1f;创建 Bean 对象的前后会调用什么方法#xf…一、Bean 的生命周期 Spring 其实就是一个管理 Bean 对象的工厂它负责对象的创建对象的销毁等 所谓的生命周期就是对象从创建开始到最终销毁的整个过程 什么时候创建 Bean 对象创建 Bean 对象的前后会调用什么方法Bean 对象什么时候销毁Bean 对象的销毁前后调用什么方法 为什么需要知道 Bean 的生命周期  其实生命周期的本质是在哪个时间节点上调用了哪个类的哪个方法 我们需要充分的了解在这个生命线上都有哪些特殊的时间节点 只有我们知道了特殊的时间节点都在哪到时我们才可以确定代码写到哪 我们可能需要在某个特殊的时间点上执行一段特定的代码这段代码就可以放到这个节点上当生命线走到这里的时候自然会被调用 二、Bean 生命周期之 5 步 Bean 生命周期的管理可以参考Spring的源码AbstractAutowireCapableBeanFactory 类的 doCreateBean() 方法 Bean 生命周期可以粗略的划分为五大步 第一步实例化Bean 第二步Bean属性赋值 第三步初始化Bean 第四步使用Bean 第五步销毁Bean package org.qiu.spring.bean;/*** Bean 的生命周期粗略的五步* 第一步实例化 Bean调用无参数构造方法* 第二步Bean 属性赋值调用 setter 方法* 第三步初始化 Bean调用 Bean 的 init 方法这个 init 方法需要自己写自己配* 第四步使用 Bean* 第五步销毁 Bean调用 Bean 的 destroy 方法这个 destroy 方法需要自己写自己配** author 秋玄* version 1.0* email qiu_2022aliyun.com* project Spring* package org.qiu.spring.bean* date 2022-11-11-10:45* since 1.0*/ public class User {private String name;public void setName(String name) {System.out.println(第二步给对象的属性赋值);this.name name;}public User() {System.out.println(第一步无参数构造方法执行);}public void initBean(){System.out.println(第三步初始化 Bean);}public void destroyBean(){System.out.println(第五步销毁 Bean);} } !-- 需要手动指定初始化方法和销毁方法 -- bean iduser classorg.qiu.spring.bean.User init-methodinitBean destroy-methoddestroyBeanproperty namename value张三/ /bean Test public void testBeanLifecycleFive(){ApplicationContext application new ClassPathXmlApplicationContext(spring.xml);User user application.getBean(user, User.class);System.out.println(第四步使用 Bean user);// 必须手动关闭 Spring 容器这样 Spring 容器才会销毁 BeanClassPathXmlApplicationContext context (ClassPathXmlApplicationContext) application;context.close(); } 运行结果  需要注意的 第一只有正常关闭 Spring 容器bean 的销毁方法才会被调用 第二ClassPathXmlApplicationContext 类才有 close() 方法 第三配置文件中的 init-method 指定初始化方法。destroy-method 指定销毁方法 三、Bean 生命周期之 7 步  在以上的5步中第3步是初始化 Bean如果你还想在初始化前和初始化后添加代码可以加入“Bean后处理器” 如果加上Bean后处理器的话Bean的生命周期就是7步了 编写一个类实现 BeanPostProcessor 类并且重写 before 和 after 方法   package org.qiu.spring.bean;import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor;/*** author 秋玄* version 1.0* email qiu_2022aliyun.com* project Spring* package org.qiu.spring.bean* date 2022-11-11-11:11* since 1.0*/ public class LogBeanPostProcessor implements BeanPostProcessor {Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {System.out.println(第三步Bean后处理器的before方法执行即将开始初始化);return bean;}/*** param bean 刚创建的 Bean 对象* param beanName Bean 的名字* return* throws BeansException*/Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {System.out.println(第五步Bean后处理器的after方法执行已完成初始化);return bean;} } !-- 配置 Bean 后处理器作用于整个配置文件中所有的 Bean -- bean classorg.qiu.spring.bean.LogBeanPostProcessor/ Test public void testBeanLifecycleFive(){ApplicationContext application new ClassPathXmlApplicationContext(spring.xml);User user application.getBean(user, User.class);System.out.println(第六步使用 Bean user);// 必须手动关闭 Spring 容器这样 Spring 容器才会销毁 BeanClassPathXmlApplicationContext context (ClassPathXmlApplicationContext) application;context.close(); } 运行结果 四、 Bean 生命周期之 7 步 如果根据源码跟踪可以划分更细粒度的步骤10步 上图中检查 Bean 是否实现了Aware 的相关接口是什么意思 Aware相关的接口包括BeanNameAware、BeanClassLoaderAware、BeanFactoryAware 当 Bean 实现了 BeanNameAwareSpring 会将 Bean的名字传递给 Bean 当 Bean 实现了 BeanClassLoaderAwareSpring 会将加载该 Bean的类加载器传递给 Bean 当 Bean 实现了 BeanFactoryAwareSpring 会将 Bean工厂对象传递给 Bean 测试以上10步可以让 User 类实现5个接口并实现所有方法 BeanNameAware BeanClassLoaderAware BeanFactoryAware InitializingBean DisposableBean package org.qiu.spring.bean;import org.springframework.beans.BeansException; import org.springframework.beans.factory.*;/*** author 秋玄* version 1.0* email qiu_2022aliyun.com* project Spring* package org.qiu.spring.bean* date 2022-11-11-10:45* since 1.0*/ public class User implements BeanNameAware, BeanClassLoaderAware, BeanFactoryAware, InitializingBean, DisposableBean {private String name;public User() {System.out.println(第一步无参数构造方法执行);}public void setName(String name) {System.out.println(第二步给对象的属性赋值);this.name name;}public void initBean(){System.out.println(第六步初始化 Bean);}public void destroyBean(){System.out.println(第十步销毁 Bean);}Overridepublic void setBeanClassLoader(ClassLoader classLoader) {System.out.println(第三步类加载器 classLoader);}Overridepublic void setBeanFactory(BeanFactory beanFactory) throws BeansException {System.out.println(第三步Bean工厂 beanFactory);}Overridepublic void setBeanName(String name) {System.out.println(第三步Bean名字 name);}Overridepublic void destroy() throws Exception {System.out.println(第九步DisposableBean destroy);}Overridepublic void afterPropertiesSet() throws Exception {System.out.println(第五步afterPropertiesSet执行);} } package org.qiu.spring.bean;import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor;/*** author 秋玄* version 1.0* email qiu_2022aliyun.com* project Spring* package org.qiu.spring.bean* date 2022-11-11-11:11* since 1.0*/ public class LogBeanPostProcessor implements BeanPostProcessor {Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {System.out.println(第四步Bean后处理器的before方法执行即将开始初始化);return bean;}/*** param bean 刚创建的 Bean 对象* param beanName Bean 的名字* return* throws BeansException*/Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {System.out.println(第七步Bean后处理器的after方法执行已完成初始化);return bean;} } Test public void testBeanLifecycleFive(){ApplicationContext application new ClassPathXmlApplicationContext(spring.xml);User user application.getBean(user, User.class);System.out.println(第八步使用 Bean user);// 必须手动关闭 Spring 容器这样 Spring 容器才会销毁 BeanClassPathXmlApplicationContext context (ClassPathXmlApplicationContext) application;context.close(); } 运行结果  通过测试可以看出来 InitializingBean 的方法早于 init-method 的执行 DisposableBean 的方法早于 destroy-method 的执行 对于 SpringBean 的生命周期掌握之前的7步即可 Bean 生命周期五步 1、实例化 Bean 2、给 Bean 的属性赋值 3、初始化 Bean 4、使用 Bean 5、销毁 Bean Bean 生命周期七步 1、实例化 Bean 2、给 Bean 的属性赋值 3、执行“Bean后处理器”的 before 方法 4、初始化 Bean 5、执行“Bean后处理器”的 after 方法 6、使用 Bean 7、销毁 Bean Bean 声明周期十步 1、实例化 Bean 2、给 Bean 的属性赋值 3、点位一 4、执行“Bean后处理器”的 before 方法 5、点位二 6、初始化 Bean 7、执行“Bean后处理器”的 after 方法 8、使用 Bean 9、点位三 10、销毁 Bean ​ ​ 点位1检查Bean是否实现了Aware相关的接口如果实现了接口则调用执行接口中的方法 点位2检查Bean是否实现了InitializingBean接口如果实现了则调用接口中的方法 点位3检查Bean是否实现了DisposableBean接口如果实现了则调用接口中的方法 的是为了给你专递一些数据让你更加方便使用 添加这三个点位的特点 都是在检查这个 Bean 是否实现了某些特定的接口如果实现了执行接口则 Spring 容器会调用这个接口中的方法 五、Bean 的作用域不同管理方式不同  Spring 根据 Bean 的作用域来选择管理方式 对于 singleton 作用域的 BeanSpring 能够精确地知道该 Bean 何时被创建何时初始化完成以及何时被销毁 而对于 prototype 作用域的 BeanSpring 只负责创建当容器创建了 Bean 的实例后Bean 的实例就交给客户端代码管理Spring 容器将不再跟踪其生命周期 把 User 类的 spring.xml 文件中的配置 scope 设置为 prototype !-- 需要手动指定初始化方法和销毁方法 -- bean iduser classorg.qiu.spring.bean.User init-methodinitBean destroy-methoddestroyBean scopeprototypeproperty namename value张三/ /bean 执行测试程序   通过测试一目了然只执行了前8步第9和10都没有执行   六、自己 new 的对象如何让 Spring 管理  有些时候可能会遇到这样的需求某个 java 对象是我们自己 new 的然后我们希望这个对象被 Spring 容器管理怎么实现   package org.qiu.spring.bean;/*** author 秋玄* version 1.0* email qiu_2022aliyun.com* project Spring* package org.qiu.spring.bean* date 2022-11-11-10:45* since 1.0*/ public class User(){ } Test public void testBeanRegister(){// 自己new的对象User user new User();System.out.println(user);// 创建 默认可列表BeanFactory 对象DefaultListableBeanFactory factory new DefaultListableBeanFactory();// 注册Beanfactory.registerSingleton(userBean, user);// 从spring容器中获取beanUser userBean factory.getBean(userBean, User.class);System.out.println(userBean); } 执行结果  一  叶  知  秋奥  妙  玄  心
http://www.w-s-a.com/news/115603/

相关文章:

  • 医院网站建设 价格app和网站开发的成本
  • 常见的网站开发工具山东建设厅官方网站李兴军
  • 二级院系网站建设情况做网站域名是什么意思
  • 网站开发双语辽宁省建设厅网站怎样下载表格
  • 网站后台密码怎么修改百度查重免费入口
  • 衡阳网站页面设计公司绍兴网站设计
  • 青岛手机建站多少钱做图表的网站 免费
  • 如何去建立和设计一个公司网站开封建设教育协会网站
  • 南充市住房和城乡建设局考试网站wordpress 下载模板站
  • 有没有单纯做旅游攻略的网站保定建站方案
  • 2017网站建设报价方案2022年企业所得税税率表一览
  • 可以做婚礼视频的网站有哪些工程公司管理制度
  • 做农产品网站需要做的准备中文手机网站设计案例
  • 福州做网站软件seo搜索优化专员招聘
  • 建站技术博客wordpress响应时间
  • 农业网站模板WordPress安徽省建设工程造价管理协会网站
  • 网站后台策划书破解版手游app平台
  • 宿迁网站建设介绍公司wordpress 文章 分类 页面
  • 建设通同类网站网站设计公司种类
  • 台州专业做网站网站可以个人做吗
  • 个人logo在线生成免费乐陵德州seo公司
  • 网站回答问题app怎么做专业定制网红柴火灶
  • 网站做的最好的公司行业网址大全
  • 内网怎么做网站服务器seo统计
  • 丽水市企业网站建设 微信营销 影视拍摄计算机专业吃香吗
  • 龙岗做网站公司哪家好找到做网站的公司
  • 网站图片alt属性wordpress 自定义栏目 调用
  • 怎样建网站最快广州网站建设工程
  • iis7 网站404错误信息12306网站很难做吗
  • 网站建设600元包公司设计图片大全