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

网站备案核验单微信朋友圈营销方案

网站备案核验单,微信朋友圈营销方案,网站banner图自适应,郑州富士康搬走了吗一、第一个接口BeanFactory BeanFactory最重要的功能就是提供Bean,给外界使用,所以先新建一个接口BeanFactory 只提供一个获取Bean的方法 public interface BeanFactory {Object getBean(String name); }二、定义抽象类AbstractBeanfactory 抽象类Ab…

一、第一个接口BeanFactory

BeanFactory最重要的功能就是提供Bean,给外界使用,所以先新建一个接口BeanFactory

  • 只提供一个获取Bean的方法
public interface BeanFactory {Object getBean(String name);
}

二、定义抽象类AbstractBeanfactory

抽象类AbstractBeanfactory实现BeanFactory接口的思路

  • 引入单例池,作为Bean的缓存
  • 如果这个Bean如果已经存在,则直接从单例池中获取
  • 如果不存在,则应该创建,然后放进单例池,然后返回

创建一个抽象类,使用模板方法设计模式,定义创建Bean这个过程

  • 父类,提供单例池
  • 子类,负责创建Bean
  • 孙子类,管理BeanDefinition
/*** AbstractBeanFactory,模板类,定义了getBean需要的所有方法* @Author 孤风雪影* @Email gitee.com/efairy520* @Date 2025/1/1 0:05* @Version 1.0*/
public abstract class AbstractBeanFactory extends DefaultSingletonBeanRegistry implements BeanFactory {/*** 实现BeanFactory唯一的的getBean方法* @param name* @return*/@Overridepublic Object getBean(String name) {//继承DefaultSingletonBeanRegistry,拥有了单例池管理功能Object bean = getSingleton(name);if (bean != null) {return bean;}//单例池中没有,调用抽象方法BeanDefinition beanDefinition = getBeanDefinition(name);return createBean(name, beanDefinition);}//1. 需要获取BeanDefinition,由孙子类实现protected abstract BeanDefinition getBeanDefinition(String beanName);//2. 创建Bean,由子类实现protected abstract Object createBean(String beanName, BeanDefinition beanDefinition);}

三、抽象类AbstractAutowireCapableBeanFactory

此类仍然是抽象类,本类的任务就是负责创建Bean对象,只需要实现自己负责的那一块任务即可

  • 实现createBean方法
  • 调用doCreateBean的目的,是继续解耦,对外方法名是createBean,对内叫做doCreateBean
package cn.shopifymall.springframework.beans.factory.support;import cn.shopifymall.springframework.beans.factory.config.BeanDefinition;/*** 负责创建Bean** @Author 孤风雪影* @Email gitee.com/efairy520* @Date 2025/1/1 1:01* @Version 1.0*/
public abstract class AbstractAutowireCapableBeanFactory extends AbstractBeanFactory {/*** 实现父类未实现的createBean方法* @param beanName* @param beanDefinition* @return*/@Overrideprotected Object createBean(String beanName, BeanDefinition beanDefinition) {return doCreateBean(beanName, beanDefinition);}protected Object doCreateBean(String beanName, BeanDefinition beanDefinition) {Class beanClass = beanDefinition.getBeanClass();Object bean = null;try {bean = beanClass.newInstance();} catch (Exception e) {throw new RuntimeException("Instantiation of bean failed", e);}addSingleton(beanName, bean);return bean;}
}

四、普通类DefaultListableBeanFactory

实现了AbstractAutowireCapableBeanFactory,作为真正的BeanFactory

  • 实现了注册Bean定义的功能
public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFactory implements BeanDefinitionRegistry {private final Map<String, BeanDefinition> beanDefinitionMap = new HashMap<>();@Overridepublic void registerBeanDefinition(String beanName, BeanDefinition beanDefinition) {beanDefinitionMap.put(beanName, beanDefinition);}@Overrideprotected BeanDefinition getBeanDefinition(String beanName) {BeanDefinition beanDefinition = beanDefinitionMap.get(beanName);if (beanDefinition == null) {throw new RuntimeException("No bean named '" + beanName + "' is defined");}return beanDefinition;}
}

五、单例池DefaultSingletonBeanRegistry

这是BeanFactory的顶层类,负责维护Bean单例池

public class DefaultSingletonBeanRegistry implements SingletonBeanRegistry {private final Map<String, Object> singletonObjects = new HashMap<>();@Overridepublic Object getSingleton(String beanName) {return singletonObjects.get(beanName);}protected void addSingleton(String beanName, Object singletonObject) {singletonObjects.put(beanName, singletonObject);}

六、总结

核心,由AbstractBeanFactory使用模板方法设计模式,拆分BeanFactory为不同的模块

  • DefaultSingletonBeanRegistry,维护Bean单例池
  • AbstractBeanfactory,定义业务流程,串联上下游
  • AbstractAutowireCapableBeanFactory,创建Bean实例
  • DefaultListableBeanFactory(最终类),管理Bean定义
    在这里插入图片描述

测试发现,两次获取的是同一个Bean
在这里插入图片描述

http://www.dtcms.com/wzjs/440339.html

相关文章:

  • 广州疫情防控措施移动端关键词优化
  • 网站优化网络推广seo百度推广获客方法
  • 海阳市建设局网站考研比较厉害的培训机构
  • 海北wap网站建设怎么制作网站链接
  • 做任务给佣金的网站百度如何免费推广
  • 新手怎么做网站打理深圳优化公司排名
  • 山东济南网站制作优化青岛seo精灵
  • 雄安网站建设优化公司网络公关
  • php做商城网站建设长春seo网站优化
  • 手机网站客户端设计与实现抖音推广佣金平台
  • 网站建设惠州热搜词排行榜
  • 广卅网络设计公司站长之家seo一点询
  • 六日做兼职的网站常宁seo外包
  • 国外网站建设现状图分析一个免费的网站
  • h5快速建站广州网站优化服务
  • 网站制作工具推荐软文发稿公司
  • 建设银行明细网站能查多久新产品推广
  • 东营今日头条seo培训中心
  • 郑州哪里可以做网站蔡甸seo排名公司
  • 公司装修费用如何入账中央网站seo
  • 网站推广怎么做的sem运营是什么意思
  • 湛江网站设计网络宣传的好处
  • 制作图网站有哪些内容百度seo关键词怎么做
  • 音乐网站系统源码搜索网站排名优化
  • 家装室内设计案例分析图文泰安seo推广
  • 个人网站备案网址网上如何推广产品
  • 企业形象设计包括什么北京网站建设东轩seo
  • 做网站建设公司百度关键词价格
  • 怎样在wordpress后台添加产品参数博客seo优化技术
  • html5做网站心得体会短信广告投放软件