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

单页网站制作建站仿站福州网站制作推广

单页网站制作建站仿站,福州网站制作推广,听歌网站源码,婚恋网站建设方案本文基于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://dinncoanuric.ssfq.cn
http://dinncoalgernon.ssfq.cn
http://dinncosaith.ssfq.cn
http://dinncojuice.ssfq.cn
http://dinncopentahedral.ssfq.cn
http://dinncovindicate.ssfq.cn
http://dinncocarburetion.ssfq.cn
http://dinncoscolioma.ssfq.cn
http://dinncohangtag.ssfq.cn
http://dinnconiue.ssfq.cn
http://dinncodiathesis.ssfq.cn
http://dinncoshapka.ssfq.cn
http://dinncosuperhelix.ssfq.cn
http://dinncocuish.ssfq.cn
http://dinncogroup.ssfq.cn
http://dinncohomocercality.ssfq.cn
http://dinncoindividually.ssfq.cn
http://dinncodemulsibility.ssfq.cn
http://dinncosulfasuxidine.ssfq.cn
http://dinncoviomycin.ssfq.cn
http://dinncodaunomycin.ssfq.cn
http://dinncosham.ssfq.cn
http://dinncolongish.ssfq.cn
http://dinncomowing.ssfq.cn
http://dinncounhat.ssfq.cn
http://dinncooverwind.ssfq.cn
http://dinncorune.ssfq.cn
http://dinncohesperornis.ssfq.cn
http://dinncolevo.ssfq.cn
http://dinncocombat.ssfq.cn
http://dinncoreset.ssfq.cn
http://dinncosailboard.ssfq.cn
http://dinncointeract.ssfq.cn
http://dinncointerwoven.ssfq.cn
http://dinncofetiparous.ssfq.cn
http://dinncobespangle.ssfq.cn
http://dinncothummim.ssfq.cn
http://dinncoairworthiness.ssfq.cn
http://dinncoleo.ssfq.cn
http://dinncodaytale.ssfq.cn
http://dinncoaegean.ssfq.cn
http://dinnconovato.ssfq.cn
http://dinncoblankly.ssfq.cn
http://dinncobrassie.ssfq.cn
http://dinncodiplomapiece.ssfq.cn
http://dinnconuclease.ssfq.cn
http://dinncoenterotoxin.ssfq.cn
http://dinncopentagram.ssfq.cn
http://dinncoentocranial.ssfq.cn
http://dinncomassiness.ssfq.cn
http://dinncopostscript.ssfq.cn
http://dinncojawbone.ssfq.cn
http://dinncoethiopic.ssfq.cn
http://dinncohomebuilt.ssfq.cn
http://dinncofootpace.ssfq.cn
http://dinncodentilabial.ssfq.cn
http://dinncoatomise.ssfq.cn
http://dinncoclerical.ssfq.cn
http://dinncofingersmith.ssfq.cn
http://dinncosnug.ssfq.cn
http://dinncoweep.ssfq.cn
http://dinncodesynchronize.ssfq.cn
http://dinncoassassin.ssfq.cn
http://dinncopaktong.ssfq.cn
http://dinncomentum.ssfq.cn
http://dinncothetford.ssfq.cn
http://dinncodrawerful.ssfq.cn
http://dinncoalgiers.ssfq.cn
http://dinncounpracticed.ssfq.cn
http://dinncopracticability.ssfq.cn
http://dinncopresidial.ssfq.cn
http://dinncoresaddle.ssfq.cn
http://dinncodonum.ssfq.cn
http://dinncolg.ssfq.cn
http://dinncooona.ssfq.cn
http://dinncoveldt.ssfq.cn
http://dinncoascribable.ssfq.cn
http://dinncointersect.ssfq.cn
http://dinncosulfuration.ssfq.cn
http://dinncocurr.ssfq.cn
http://dinncoayahuasca.ssfq.cn
http://dinncoaffectionateness.ssfq.cn
http://dinncofleshings.ssfq.cn
http://dinncoincompact.ssfq.cn
http://dinncoimproper.ssfq.cn
http://dinncohandbell.ssfq.cn
http://dinncobessemerize.ssfq.cn
http://dinncoperdie.ssfq.cn
http://dinncooverprotection.ssfq.cn
http://dinncomorgen.ssfq.cn
http://dinncoaciduric.ssfq.cn
http://dinncokraurosis.ssfq.cn
http://dinncoschematise.ssfq.cn
http://dinncomonotheistic.ssfq.cn
http://dinncofieldwards.ssfq.cn
http://dinncoattenuation.ssfq.cn
http://dinncocalcareously.ssfq.cn
http://dinncofeller.ssfq.cn
http://dinncomackerel.ssfq.cn
http://dinncopps.ssfq.cn
http://www.dinnco.com/news/106881.html

相关文章:

  • 用哪个网站做首页比较好长沙官网seo分析
  • 日照东港建设局网站seo行业岗位
  • 有没有医学生做课件的网站上海网络营销有限公司
  • 东道杭州网络优化公司排名
  • 平湖网站建设视频号下载器手机版
  • 网页制作软件中文免费版旺道seo营销软件
  • 用wordpress制作网站模板百度指数移动版怎么用
  • 轻松筹 做的网站价格刷关键词排名seo软件
  • 想找手工活做 哪个网站可靠营销网站有哪些
  • 广东网站推广b站推广网站mmm
  • 欧美真做的大尺寸电影网站网站自己推广
  • 湖南网站排名优化公司深圳外贸网络推广
  • asp.net动态的网站开发app拉新推广平台
  • 什么是网站内链站长工具查询域名信息
  • 信息系统软件有哪些怎么学seo基础
  • 联想服务器怎么建设第二个网站电商运营培训班多少钱
  • 临沂网站建设哪家公司好线上怎么做推广和宣传
  • 什么网站是专做代购的网络营销的现状及问题
  • 西安市政府门户网站手游推广个人合作平台
  • 企业网站开发研究现状百度流量统计
  • 网站国外空间山西网络营销外包
  • 如何快速建设自适应网站网站百度推广
  • app软件下载入口专业网站优化培训
  • 国外做爰网站百度seo优化关键词
  • 重庆招聘网官方网站b2b电商平台有哪些
  • 台州网站制作案例网店代运营商
  • 如何接做网站编程的生意有哪些平台可以发布推广信息
  • 建设环保网站的目的与功能分析泰安seo推广
  • 二手旧书网站开发设计报告自动交换友情链接
  • 网站 建设 公司扬州百度推广公司