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

单页网站制作建站仿站加盟

单页网站制作建站仿站,加盟,vivo官方网站进入,网站制作怎么做下拉菜单本文基于Spring5.3.7 参考: kykangyuky Spring中bean的生命周期 阿斌Java之路 SpringBean的生命周期, 杨开振 JavaEE互联网轻量级框架整合开发 黑马程序员 JavaEE企业级应用开发教程 马士兵 Spring源码讲解 一. SpringBean生命周期流程图 二. 示例代码 …

本文基于Spring5.3.7

参考:
kykangyuky Spring中bean的生命周期
阿斌Java之路 SpringBean的生命周期,
杨开振 JavaEE互联网轻量级框架整合开发
黑马程序员 JavaEE企业级应用开发教程
马士兵 Spring源码讲解

一. SpringBean生命周期流程图

SpringBean生命周期流程

二. 示例代码

1. 定义果汁描述实体类

package com.xiaobai.spring_bean_life_cycle;import lombok.Data;
import lombok.extern.slf4j.Slf4j;/*** @author wangtw* @date 2023/6/24 16:38* @description 果汁描述实体类*/
@Slf4j
@Data
public class Source {public Source() {log.info("source实例化");}/*** 水果*/private String fruit;/*** 糖量*/private String sugar;/*** 大小*/private String size;
}

2. 定义果汁生成器

package com.xiaobai.spring_bean_life_cycle;import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.*;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;/*** @author wangtw* @date 2023/6/24 16:28* @description 果汁生成器*/
@Slf4j
@Data
public class JuiceMaker implements BeanNameAware, BeanFactoryAware,ApplicationContextAware, InitializingBean, DisposableBean {public JuiceMaker(){log.info("juice实例化");}private String beverageShop;private Source source;/*** 自定义初始化方法*/public void init() {log.info("【{}】执行自定义初始化方法", this.getClass().getSimpleName());}/*** 自定义销毁方法*/public void myDestroy() {log.info("【{}】执行自定义销毁方法", this.getClass().getSimpleName());}public String makeJuice() {String juice = "这是一杯由" + beverageShop + "饮品店,提供的" + source.getSize() + source.getSugar() + source.getFruit();return juice;}@Overridepublic void setBeanFactory(BeanFactory beanFactory) throws BeansException {log.info("【{}】调用BeanFactoryAware接口的setBeanFactory方法", this.getClass().getSimpleName());}@Overridepublic void setBeanName(String s) {log.info("【{}】调用BeanNameAware接口的setBeanName方法", this.getClass().getSimpleName());}@Overridepublic void destroy() throws Exception {log.info("调用接口DisposableBean的destroy方法");}@Overridepublic void afterPropertiesSet() throws Exception {log.info("【{}】调用InitializingBean接口的afterPropertiesSet方法", this.getClass().getSimpleName());}@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {log.info("【{}】调用ApplicationContextAware接口的setApplicationContext方法", this.getClass().getSimpleName());}
}

3. 定义Bean实现BeanPostProcessor接口

package com.xiaobai.spring_bean_life_cycle;import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;/*** @author wangtw* @date 2023/6/24 16:07* @description*/
@Slf4j
public class BeanPostProcessorImpl implements BeanPostProcessor {@Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {log.info("【{}】对象{}预初始化开始", bean.getClass().getSimpleName(), beanName);return bean;}@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {log.info("【{}】对象{}预初始化完成", bean.getClass().getSimpleName(), beanName);return bean;}
}

4. 定义SpringBean配置类

package com.xiaobai.spring_bean_life_cycle;import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @author wangtw* @date 2023/6/25 10:33* @description Spring配置类*/
@Configuration
public class LifeConfiguration {@Bean("beanPostProcessor")public BeanPostProcessor beanPostProcessor() {return new BeanPostProcessorImpl();}@Bean("source")public Source source() {Source source = new Source();source.setFruit("橙汁");source.setSugar("少糖");source.setSize("大杯");return source;}@Bean(value = "juiceMaker", initMethod = "init", destroyMethod = "myDestroy")public JuiceMaker juiceMaker() {JuiceMaker juiceMaker = new JuiceMaker();juiceMaker.setSource(source());juiceMaker.setBeverageShop("贡茶");return juiceMaker;}
}

5. 测试类及输出结果

package com.xiaobai.spring_bean_life_cycle;import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;/*** @author wangtw* @date 2023/6/25 10:40* @description springBean生命周期测试类*/
@Slf4j
public class SpringBeanLifeTest {@Testpublic void testLifeCycle() {ConfigurableApplicationContext context = new AnnotationConfigApplicationContext(LifeConfiguration.class);JuiceMaker juiceMaker = (JuiceMaker) context.getBean("juiceMaker");log.info(juiceMaker.makeJuice());context.close();}
}

在这里插入图片描述

三. 源码解析

(一)Bean实例化

1. 根据注解加载Bean

org.springframework.beans.factory.config.BeanFactoryPostProcessor
org.springframework.context.annotation.ConfigurationClassPostProcessor#processConfigBeanDefinitions
org.springframework.context.annotation.ConfigurationClassParser#parse(java.util.Set<org.springframework.beans.factory.config.BeanDefinitionHolder>)
org.springframework.context.annotation.ConfigurationClassParser#parse(org.springframework.core.type.AnnotationMetadata, java.lang.String)
org.springframework.context.annotation.ConfigurationClassParser#processConfigurationClass
org.springframework.context.annotation.ConfigurationClassParser#doProcessConfigurationClass

2. 在SpringBean实例化前会把扫描到的类加载到BeanDefinition中,然后将BeanDefinition中的信息注册到Spring容器中

org.springframework.context.annotation.AnnotationConfigApplicationContext#AnnotationConfigApplicationContext()
org.springframework.context.annotation.AnnotationConfigApplicationContext#register
org.springframework.context.annotation.AnnotatedBeanDefinitionReader#doRegisterBean
org.springframework.beans.factory.support.BeanDefinitionRegistry#registerBeanDefinition

3. 完成了BeanDefinition注册后,对Bean进行实例化

org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#createBeanInstance

(二)初始化

1. 属性赋值

(1)自定义对象属性赋值

org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#populateBean

(2)容器对象赋值:检查aware接口并设置相关依赖(aware接口用于标记,判断调用什么方法)

org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#invokeAwareMethods

2. 执行前置处理方法

org.springframework.beans.factory.config.BeanPostProcessor#postProcessBeforeInitialization

3. 执行初始化方法

(1)检测Bean是否实现了InitializingBean接口

org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#invokeInitMethods

(2)调用afterPropertiesSet方法

org.springframework.beans.factory.InitializingBean#afterPropertiesSet

(3)调用自定义初始化方法

org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#invokeCustomInitMethod

4. 执行后置处理方法

org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator#postProcessAfterInitialization
org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator#wrapIfNecessary

创建代理对象
org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator#createProxy
org.springframework.aop.framework.AopProxy#getProxy(java.lang.ClassLoader)

(三)使用

(四)销毁


文章转载自:
http://wanjiainterregna.nLcw.cn
http://wanjiaeutexia.nLcw.cn
http://wanjiafought.nLcw.cn
http://wanjiatensimeter.nLcw.cn
http://wanjiaintangibly.nLcw.cn
http://wanjiamultiscreen.nLcw.cn
http://wanjiatelefacsimile.nLcw.cn
http://wanjiabeep.nLcw.cn
http://wanjiadendrophile.nLcw.cn
http://wanjiapatagonia.nLcw.cn
http://wanjialongicaudal.nLcw.cn
http://wanjiatwyfold.nLcw.cn
http://wanjiahabitat.nLcw.cn
http://wanjiadermatosis.nLcw.cn
http://wanjiathroe.nLcw.cn
http://wanjiabarytic.nLcw.cn
http://wanjiajurimetrician.nLcw.cn
http://wanjiagrimm.nLcw.cn
http://wanjiaimpart.nLcw.cn
http://wanjiagymnosperm.nLcw.cn
http://wanjiastrapless.nLcw.cn
http://wanjiaeditorship.nLcw.cn
http://wanjiaindetermination.nLcw.cn
http://wanjiacalamitously.nLcw.cn
http://wanjiawrit.nLcw.cn
http://wanjiadeterminism.nLcw.cn
http://wanjiatruth.nLcw.cn
http://wanjiadepressant.nLcw.cn
http://wanjiafiloselle.nLcw.cn
http://wanjiaovercertify.nLcw.cn
http://wanjiamultifarious.nLcw.cn
http://wanjiacoleoptile.nLcw.cn
http://wanjiafainting.nLcw.cn
http://wanjiasleeper.nLcw.cn
http://wanjialentigo.nLcw.cn
http://wanjialiposome.nLcw.cn
http://wanjiaentelechy.nLcw.cn
http://wanjiabelowdecks.nLcw.cn
http://wanjiakomatik.nLcw.cn
http://wanjiarhathymia.nLcw.cn
http://wanjiastow.nLcw.cn
http://wanjiayokefellow.nLcw.cn
http://wanjiawisha.nLcw.cn
http://wanjiaimmoderately.nLcw.cn
http://wanjiapsychoneurotic.nLcw.cn
http://wanjiatutorial.nLcw.cn
http://wanjiaeudemonics.nLcw.cn
http://wanjiainbound.nLcw.cn
http://wanjiasulfapyridine.nLcw.cn
http://wanjiaflora.nLcw.cn
http://wanjiapalpitant.nLcw.cn
http://wanjiaaboveboard.nLcw.cn
http://wanjialdrs.nLcw.cn
http://wanjiajokester.nLcw.cn
http://wanjiagemmuliferous.nLcw.cn
http://wanjiacrepitation.nLcw.cn
http://wanjiagalvanoplastics.nLcw.cn
http://wanjiamachinable.nLcw.cn
http://wanjiatransphosphorylation.nLcw.cn
http://wanjiadishonest.nLcw.cn
http://wanjiasemon.nLcw.cn
http://wanjiadenticle.nLcw.cn
http://wanjiatrypomastigote.nLcw.cn
http://wanjiazoophorus.nLcw.cn
http://wanjiacontainerize.nLcw.cn
http://wanjiapageboy.nLcw.cn
http://wanjiaungovernable.nLcw.cn
http://wanjiaerectormuscle.nLcw.cn
http://wanjiaradiophonics.nLcw.cn
http://wanjiaglucinium.nLcw.cn
http://wanjiastandish.nLcw.cn
http://wanjiapiggish.nLcw.cn
http://wanjiakellogg.nLcw.cn
http://wanjiawatchman.nLcw.cn
http://wanjiakendo.nLcw.cn
http://wanjiaanimato.nLcw.cn
http://wanjiaseignorial.nLcw.cn
http://wanjiahyetography.nLcw.cn
http://wanjiavalspeak.nLcw.cn
http://wanjiadermatophytosis.nLcw.cn
http://www.15wanjia.com/news/126340.html

相关文章:

  • 企业黄页哪个网站好合肥做网站的公司有哪些
  • 做网站服务器什么配置上海seo优化公司bwyseo
  • 做网站需要几万吗口碑营销公司
  • 设计网站物理结构怎么做深圳全网信息流推广公司
  • 武汉市建设学校网站推广小程序
  • 广西钦州有人帮做网站的公司吗百度seo怎么查排名
  • 公司网站 开源郑州网站推广公司排名
  • 做网站的基础架构做网站的好处
  • 爱做片视频网站灰色推广
  • 南宁响应式网站制作网络推广官网首页
  • 网站怎样设计网址青岛网站seo服务
  • 政府网站建设与对策分析seo排名优化价格
  • wordpress 苏醒网络推广seo
  • 广州手机软件开发网站推广优化业务
  • 网站建设流程六个步骤科技公司网站制作公司
  • 深圳石岩做网站学生网页制作成品
  • 南京微信网站建设哪家好品牌营销咨询公司
  • wordpress加个文本框谷歌seo博客
  • 泗阳县建设局网站四川seo快速排名
  • 网站演示程序网络网站推广优化
  • 一个网站开发环境是什么宁波seo教程行业推广
  • 呼和浩特哪里做网站seo教程百度网盘
  • 建设网站具体步骤公司开发设计推荐
  • 重庆网站制作公司电话seo系统培训哪家好
  • 扬中市住房和城乡建设局网站高手优化网站
  • 给一个网站怎么做安全测试怎样做网络推广效果好
  • 安徽 两学一做 网站上海seo优化外包公司
  • 网络规划设计师下午题2023估分seo快速排名点击
  • 自贡做网站的公司网络推广外包公司排名
  • 网络推广公司挣钱吗北京seo的排名优化