范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

spring源码解析一bean

  学习spring源码是一件非常煎熬且很有挑战的事情,在我们日常的工作中用的最多的框架可能就是spring及其的拓展,这是一个极其庞大的家族,首先我们来先来学习spring源码,然后在它的基础上学习spring mvc ,springboot,spring colud等。
  1、 BeanFactory 对bean的生命周期进行管理,生产各种所需要的bean供我们使用
  BeanFactory是一个接口,它的子接口跟实现有:AnnotationConfigApplicationContext 是用来管理注解bean的容器;GenericApplicationContext 通用应用上下文; AnnotationConfigRegistry 注解配置注册表,ListableBeanFactory根据各种条件获取bean的配置清单;ConfigurableBeanFactory提供配置factory的各种方法
  2、BeanFactoryPostProcessor:对beanFactory进行操作更新的类; @FunctionalInterface public interface BeanFactoryPostProcessor {     /**    * Modify the application context"s internal bean factory after its standard    * initialization. All bean definitions will have been loaded, but no beans    * will have been instantiated yet. This allows for overriding or adding    * properties even to eager-initializing beans.    * @param beanFactory the bean factory used by the application context    * @throws org.springframework.beans.BeansException in case of errors    */   void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;   }
  BeanFactoryPostProcessor 就一个方法 postProcessBeanFactory,看一下他的实现ConfigurationClassPostProcessor  class ConfigurationClassPostProcessor implements BeanDefinitionRegistryPostProcessor,     PriorityOrdered, ResourceLoaderAware, BeanClassLoaderAware, EnvironmentAware {
  ConfigurationClassPostProcessor 实现了好几个接口,我们简单说一下: BeanDefinitionRegistryPostProcessor: BeanFactoryPostProcessor的子接口,在常规的BeanFactoryPostProcessor检测之前注册bean的定义信息
  PriorityOrdered:设置优先级
  ResourceLoaderAware:设置资源加载器,可以获取到外部资源文件
  BeanClassLoaderAware:设置类加载器
  EnvironmentAware:设置环境变量  /**    * 添加CGLIB增强处理及ImportAwareBeanPostProcessor后置处理类    *    * Prepare the Configuration classes for servicing bean requests at runtime    * by replacing them with CGLIB-enhanced subclasses.    */   @Override   public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) {     int factoryId = System.identityHashCode(beanFactory);     if (this.factoriesPostProcessed.contains(factoryId)) {       throw new IllegalStateException(           "postProcessBeanFactory already called on this post-processor against " + beanFactory);     }     this.factoriesPostProcessed.add(factoryId);     if (!this.registriesPostProcessed.contains(factoryId)) {   //构建和验证一个类是否被@Configuration修饰,并做相关的解析工作       processConfigBeanDefinitions((BeanDefinitionRegistry) beanFactory);     }   //增强配置     enhanceConfigurationClasses(beanFactory);     //添加后置处理类     beanFactory.addBeanPostProcessor(new ImportAwareBeanPostProcessor(beanFactory));   }
  3、BeanDefinition:bean的定义描述信息;
  从加载配置文件后生成bean定义信息,主要就是设置类名,作用域,单例还是原型,是否懒加载等
  4、 beanPostProcessor:对初始化前后进行处理的类;
  主要就两个方法 public interface BeanPostProcessor {      /**     * 初始化方法调用前要进行的处理逻辑     *     * Apply this {@code BeanPostProcessor} to the given new bean instance before any bean     * initialization callbacks (like InitializingBean"s {@code afterPropertiesSet}     * or a custom init-method). The bean will already be populated with property values.     * The returned bean instance may be a wrapper around the original.     * 

The default implementation returns the given {@code bean} as-is. * @param bean the new bean instance * @param beanName the name of the bean * @return the bean instance to use, either the original or a wrapped one; * if {@code null}, no subsequent BeanPostProcessors will be invoked * @throws org.springframework.beans.BeansException in case of errors * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet */ @Nullable default Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { return bean; } /** * 在初始化方法指定后要进行的处理逻辑 * * Apply this {@code BeanPostProcessor} to the given new bean instance after any bean * initialization callbacks (like InitializingBean"s {@code afterPropertiesSet} * or a custom init-method). The bean will already be populated with property values. * The returned bean instance may be a wrapper around the original. *

In case of a FactoryBean, this callback will be invoked for both the FactoryBean * instance and the objects created by the FactoryBean (as of Spring 2.0). The * post-processor can decide whether to apply to either the FactoryBean or created * objects or both through corresponding {@code bean instanceof FactoryBean} checks. *

This callback will also be invoked after a short-circuiting triggered by a * {@link InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation} method, * in contrast to all other {@code BeanPostProcessor} callbacks. *

The default implementation returns the given {@code bean} as-is. * @param bean the new bean instance * @param beanName the name of the bean * @return the bean instance to use, either the original or a wrapped one; * if {@code null}, no subsequent BeanPostProcessors will be invoked * @throws org.springframework.beans.BeansException in case of errors * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet * @see org.springframework.beans.factory.FactoryBean */ @Nullable default Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { return bean; }   想学习源码的同学可以加一个关注,将推出一系列源码文章,大家一起学习!   公众号回复 【redis设计与实现 】获取电子书


AMD显卡,危险了原本,我以为2022年会等来一场显卡市场的旷世大战,谁能想到却是英伟达的个人表演。去年九月份,英伟达发布RTX40系显卡,将个人消费级显卡的性能上限又往上提升了一大截,不过高昂的售2023年家庭影院音响选购指南,家庭影院哪个牌子好?随着科技水平的快速发展和人们对生活品质的不断追求,现如今,在家里打造一间专属的家庭影院或影音室已经成为一种潮流趋势。足不出户,就能尽情享受高清大片的震撼视听体验,这样的生活真的令人一加Ace2V未发先火,重要信息预告再度来袭!此前,根据一加官方发布消息称,将于2023年3月7日14点30分发布一加Ace2系列的第二款产品一加Ace2V。2023年3月2日,官方继续为该机带来预热,官方曝光了一加Ace2V媒体称Win11任务栏集成的必应聊天只不过是Bing。com的植入推广IT之家3月2日消息,微软在今年2月底为Win11推送了2023年2月重磅功能更新(Moment2),在任务栏中集成了必应聊天功能。国外科技媒体WindowsCentral在最新报OPPOReno10Pro亮剑,144Hz4nm120W,还有5000mAh大电池Reno系列作为OPPO的灵魂产品,一个核心的任务就是深刻洞察用户的需求变化,与时俱进地做出相应的产品策略进化,从而打造一个更具有标杆意义的产品系列,为OPPO的接下来的发展立一个2月更新手机PSLR全功能解锁版v8。10上线,手机修图无敌了手机版的LRPS不得不说真的非常方便好用!楚月独家激活pojie版本,全功能无需付费订阅也可使用!无偿领取提示关注并私信楚月头条号回复想要按照提示即可免费领取今天长工就给大家带来安命好之人,必先独处在这些事上独来独往,命不会差亚里士多德说过,离群索居者,不是神灵,就是野兽。一个人,敢于跟群体保持距离,甚至不受到圈子的影响,不在乎别人的看法,那他的思维和境界,绝对不是一般人可以企及的。无论在什么时候,都是多少度的白酒最好?白酒行家道出实情,先搞懂再喝,才不吃亏!白酒度数高仿佛是它的一个标签,喝惯了啤酒葡萄酒果酒等低度酒的酒友,提起白酒时,大概第一反应就是度数高口感辣。实际上,白酒并非只有高度数的白酒,也有低度白酒。白酒的度数是指酒精度,指真空西装配大红唇,该轮到她红了!话说,又到周日啦。郑尔摩斯周报在纽约准时播报。带大家看本周天下大事,全世界美人帅哥都穿了啥。01外国明星组1。NicoleKidman妮可基德曼本周穿小黑裙现身,脖子上的大项链很吸历代名将系列黑龙江籍7位名将黑龙江先后有肃慎东胡秽貊夫余高句丽鲜卑靺鞨等部族,至唐代先后置忽汗州渤海都督府黑水都督府室韦都督府。元代属辽阳省,直至清朝设黑龙江将军,由此得名。由于历史原因,黑龙江古代名将,皆为家乐福负重爬坡作者丨张梓桐编辑丨张伟贤图源丨图虫在面临购物卡使用受限货架大面积空置等一系列争议后,家乐福又因拖欠供应商货款陷入纷争。近日,知名食品品牌好丽友食品有限公司向法院申请财产保护,要求冻
1年期最高竟达5!这类存款利率又涨了,现在存合适吗?视频加载中你能想象吗?在人民币存款利率持续走低,银行理财产品大面积亏损的情况下,有一类存款的利率却一度飙升到了5。据报道,前不久多家银行的美元存款利率又涨了。以某行1年期产品为例,广州红不只落羽杉,冬天的红叶植物还有它们!冬日花城,落羽杉成为市民朋友最爱打卡的植物之一。然而广州的冬天并非只有一种暖色,除了红枫之外,红桑和南天竹的叶片也会在秋冬季变色,继而变身为美丽的红叶植物。在华南国家植物园烈士陵园斯坦福大学研究一个人开始走运的5个迹象每个人的运气,都暗藏因果。作者洞见yebo生活中,我们经常羡慕别人运气太好,抱怨自己运气太差。那么,什么是运气呢?运气又是怎么来的?斯坦福大学蒂娜齐莉格教授,在一次演讲中,提出一个睡得越早,死得越早有科学依据吗?牛津大学万人研究给出答案临近过年,很多厂子都会带着员工,来医院免费体检。这不,头两天我们医院旁边的自行车厂厂长,就带着车间的十几个老员工,来医院体检。由于他们每年都来,我们自然也就熟络起来,闲不住的打起了7影片定档年初1,票房预测吴京第1沈腾第3,梁朝伟可能败光路人缘想必很多观众都知道,每年的春节都是众多影片定档压轴的时候,尤其是大片的票房预测和主演的口碑,成为了很多八卦君讨论的焦点。今年的春节档也不例外,光是大年初一就有7部影片上映,影片都还哈工大学霸陈慧祥,留美5年毕业前自缢于实验室,遗书曝光了真相真理如星空般浩瀚广阔,与人类个体和脆弱相比,前者则显得永恒无恒和不朽。有限与无限互相对立,有限彼岸向无限彼岸眺望,相对价值向绝对价值投奔,我们选择了敬畏真理,世间万物没有例外,毕竟曾经火爆的电视机现跌破成本,200元白菜价依然不好卖?在刚结束的2022年当中,电视行业受到了不少的关注,但是并不是什么好的消息,基本都是关于电视机的价格越来越便宜,甚至在现在买一个电视机的价格都只需要200元就能买到。要知道在以前一远离风险的2023热点追踪2022年12月30日,遵义道桥建设(集团)有限公司(下称遵义道桥)发布关于推进银行贷款重组事项的公告称,为缓解公司短期偿债压力和优化债务结构,以债权保全为前提,经各方友好预判科技趋势可能会错,但不预判必败!历史书上写满了帝王将相的事迹,然而真正改变人类命运的是科技。特约撰稿丨关不羽1918年9月28日,在西班牙萨莫拉市,一份报纸刊登了一则消息,描述了一种新的流行病。这则报道中这样写道小心!这4个饮食习惯会让爸妈营养出问题作为子女,我们最大的愿望就是希望爸妈身体健康。可是你有多久没有关注过父母的营养状况了。据于普林的老年医学上显示,中国65岁以上的老年人,55存在营养不良或营养风险。这是由于一方面随长期喝电热水壶烧的水,会给身体带来影响吗?尽早了解一下由于生活节奏加快,所以人类休息的时间越来越少,饮水方式也变得越来越简单,除了使用饮水机饮水之外,很多人会用电热水壶来烧水喝。电热水壶最早流行于欧美发达国家,因为节能,省时,便捷,美