为了弄清楚Bean是怎么来的,花费了大把功夫,现在要把Bean Definition的加载.解析.处理.注册到bean工厂的过程记下来.这只是bean definition 的加载.解析.处理.注册过程中的一种. 好记性不如烂笔头. 首先我已经知道bean definition 存在了哪里:它就存在一个Map对象中,如果使用的是DefaultListableBeanFactory的话,它就存在一个ConcurrentHashMap对象中. /** bean 的名字为键,BeanDefinitio…
架构体系 在谈spring bean的重新加载前,首先我们来看看spring ioc容器. spring ioc容器主要功能是完成对bean的创建.依赖注入和管理等功能,而这些功能的实现是有下面几个组件完成的: Resource:对资源的抽象,不同的资源有不同的实现,例如:ClasspathResource.FileSystemResource... BeanDefinition:描述一个具体的bean,里面包含了bean的一些基本信息,不同类型的bean也有不同的实现类:ScannedGene…
Spring bean是如何加载的 加载bean的主要逻辑 在AbstractBeanFactory中doGetBean对加载bean的不同情况进行拆分处理,并做了部分准备工作 具体如下 获取原始bean name 根据alia获取原始bean name 去除FactoryBean时的& [如果是需要获取FactoryBean自省,配置时需要在bean name前添加&] 尝试从缓存中获取实例 如果获取到实例,还要委托getObjectForBeanInstance解决FactoryBea…
Hibernate懒加载解析 在Hibernate框架中,当我们要访问的数据量过大时,明显用缓存不太合适, 因为内存容量有限 ,为了减少并发量,减少系统资源的消耗,这时Hibernate用懒加载机制来弥补这种缺陷,但是这只是弥补而不是用了懒加载总体性能就提高了. 我们所说的懒加载也被称为延迟加载,它在查询的时候不会立刻访问数据库,而是返回代理对象,当真正去使用对象的时候才会访问数据库. 实现懒加载的前提: 1 实体类不能是final的 2 能实现懒加载的对象都是被CGLIB(反射调用)改写的代理…
Sspring bean被初始化加载2次 spring框架的web项目时,启动的时候发现某个bean被加载了两次,比如使用SchedulingConfigurer或者使用@PostConstruct的方法都被执行了2次 web.xml 配置 <context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/dispatcher-servlet.xml &…
lazy-init(懒加载),表示该bean在容器初始化的时候不进行初始化. 例如: <bean name="role1" class="com.fz.entity.Role" lazy-init="true"> 以上配置表示:spring容器在初始化的时候不会初始化role1这个bean,当配置上lazy-init=true之后,表示该bean是懒加载模式,什么时候用到了该bean才会进行初始化. 它有两个值:true,false(…
前文:Away3D断断续续用了一段时间了,三维相关的很多算法,计算转换还是有点绕,整理些自己觉得还有点意思东西,希望大家有用. 三维开始,Away3D构架你场景那几行代码各处都有,这里就不copy了,总之在构建完成之后,我们看看怎样去加载一个精细模型并解析 正式开始: 一.首先对Away3D中loader包下面几个类做简单介绍(先了解了才能知道知道怎么去用). Away3D类库中负责加载解析的相关类主要在loader包下,当然还有个全局资源管理的AssetLibirary相关.具体职能如下: A…
此文已由作者易国强授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. Bean 的顺序加载 有些场景中,我们希望编写的Bean能够按照指定的顺序进行加载.比如,有UserServiceBean和OrderServiceBean,我们需要在OrderServiceBean中调用UserServiceBean,获取其提供的一些数据信息.针对这一场景,通常来说,有这么几种方式: 1.将UserServiceBean封装成一个服务类(如采用@Service注解),然后在OrderS…
转自原文 <script>标签的加载解析执行 看了很多网上的文章,都是大同小异.总结一下.内部原理还没有搞清楚,有机会再学习. 一.<script>标签的加载解析执行顺序 html页面中的<script>标签中的内容(直接写入或者引用外部文件都一样)是以顺序加载执行的,每个<script>标记内容可以当成一个独立的块,同步的情况下一个块加载解析然后执行完后才加载下一块.当然这时也会阻塞其他页面元素的加载.所以网上说的变量调用: <script type…
前言 通过往期的文章我们已经了解了Spring对XML配置文件的解析,将分析的信息组装成BeanDefinition,并将其保存到相应的BeanDefinitionRegistry中,至此Spring IOC的初始化工作已经完成,这篇文章主要对Bean的加载进行一个深入的了解及探索. 想要了解Bean就必要要知道接口BeanFactory,接下来我们就从BeanFactory切入 BeanFactory 我们在调用getBean()方法时,无论是显示调用还是隐式调用.都会触发Bean加载的阶段.…
前言 本篇文章主要介绍 Spring IoC 容器怎么加载 bean 的定义元信息. 下图是一个大致的流程图: 第一次画图,画的有点烂.…
项目结构如下: ResourceBean.java代码: package com.it.res; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class ResourceBean { private FileOutputStream out; private File file; publ…
一.pickerView简单使用 1.UIPickerViewDataSource 这两个方法必须实现 // 返回有多少列 - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView; // 返回第component有多少行 - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component;…
最终得出结果:先 listener >> filter >> servlet >> spring 所以,如果过滤器中要使用到 bean,可以将spring 的加载 改成 Listener的方式 <listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener> 参考文档:htt…
#  JS加载XML,浏览器之间有差异,代码如下 this.createXMLDom = function() { var xmldoc; var xmlFile = "XXXXXXXXX.xml"; if (window.ActiveXObject) { xmldoc = new ActiveXObject("Microsoft.XMLDOM"); xmldoc.async = false; //和FireFox一致,设为true; xmldoc.preserve…
在ApplicationContext容器中,当容器一启动时,所有的bean(单例的)都会被创建和注入依赖,这也被视为IOC容器启动过程中的一个步骤. 那如何让一个bean在需要的时候再被创建,而不是容器一加载的时候呢? 在配置文件的bean标签中,将lazy-init属性设置为true <bean id="lazy" class="com.foo.ExpensiveToCreateBean" lazy-init="true"/> &…
xml文件 <?xml version="1.0" encoding="utf-8" ?> <taxrates> <taxrate id="> <lower></lower> <upper></upper> <rate></rate> <buckle></buckle> </taxrate> <taxrate…
本文主要讲解Spring加载xml配置文件的方式,跟踪加载BeanDefinition的全过程. 源码分析 源码的入口 ClassPathXmlApplicationContext构造函数 new ClassPathXmlApplicationContext(“spring.xml”)用于加载CLASSPATH下的Spring配置文件,将配置文件传给构造函数,然后调用类内部的另外一个重载方法. 从构造函数中,可以看到一共做了3件事 super(parent) super(parent)的作用是为…
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 你写的代码,能接的住产品加需求吗? 接,是能接的,接几次也行,哪怕就一个类一片的 if...else 也可以!但接完成什么样可就不一定了,会不会出事故也不是能控制住的. 那出事故时,你说因为我写 if...else 多了导致代码烂了,但可是你先动的手啊:你说的需求还得加.你说的老板让上线.你说的合同都签了,搬砖码农的我没办法,才以堆代码平需求,需求太多不好搞,我才以搬砖平需求!诸侯…
如何使用这些bean,bean加载的探索: MyTestBean bean=(MyTestBean) bf.getBean("myTestBean"); AbstractBeanFactory.java protected <T> T doGetBean( final String name, final Class<T> requiredType, final Object[] args, boolean typeCheckOnly) throws Beans…
之前写过bean的解析,这篇来讲讲bean的加载,加载要比bean的解析复杂些,该文之前在小编原文中有发表过,要看原文的可以直接点击原文查看,从之前的例子开始,Spring中加载一个bean的方式: TestBean bean = factory.getBean("testBean"); 来看看getBean(String name)方法源码, @Override public Object getBean(String name) throws BeansException { re…
代码入口 之前写文章都会啰啰嗦嗦一大堆再开始,进入[Spring源码分析]这个板块就直接切入正题了. 很多朋友可能想看Spring源码,但是不知道应当如何入手去看,这个可以理解:Java开发者通常从事的都是Java Web的工作,对于程序员来说,一个Web项目用到Spring,只是配置一下配置文件而已,Spring的加载过程相对是不太透明的,不太好去找加载的代码入口. 下面有很简单的一段代码可以作为Spring代码加载的入口: ApplicationContext ac = new ClassP…
转载自:https://www.cnblogs.com/xrq730/p/6285358.html 代码入口 之前写文章都会啰啰嗦嗦一大堆再开始,进入[Spring源码分析]这个板块就直接切入正题了. 很多朋友可能想看Spring源码,但是不知道应当如何入手去看,这个可以理解:Java开发者通常从事的都是Java Web的工作,对于程序员来说,一个Web项目用到Spring,只是配置一下配置文件而已,Spring的加载过程相对是不太透明的,不太好去找加载的代码入口. 下面有很简单的一段代码可以作…
Spring 系列教程之 bean 的加载 经过前面的分析,我们终于结束了对 XML 配置文件的解析,接下来将会面临更大的挑战,就是对 bean 加载的探索.bean 加载的功能实现远比 bean 的解析要复杂得多,同样,我们还是以本书开篇的示例为基础,对于加载 bean 的功能,在 Spring 中的调用方式为 Mytestbean bean=(Mytestbean) bf getbean("mytest Bean") 这句代码实现了什么样的功能呢?我们可以先快速体验一下 Sprin…
很多朋友可能想看Spring源码,但是不知道应当如何入手去看,这个可以理解:Java开发者通常从事的都是Java Web的工作,对于程序员来说,一个Web项目用到Spring,只是配置一下配置文件而已,Spring的加载过程相对是不太透明的,不太好去找加载的代码入口. 下面有很简单的一段代码可以作为Spring代码加载的入口: 1 2 ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml"); ac…
首先Web项目使用Spring是通过在web.xml里面配置org.springframework.web.context.ContextLoaderListener初始化IOC容器的. <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> 那就以此为切入点顺藤摸瓜. public class…
<spring源码之:循环依赖> AbstractBeanFactory的作用:别名管理,单例创建与注册,工厂方法FactoryBean支持. 由图我们直接的看出,AbstractBeanFactory继承了FatoryBeanRegistrySupport的同时,也实现了ConfigurableBeanFactory,可想而知abstractFactoryBean的功能有多强大,这里只是简单的猜测,我们来看它的具体实例. 一. AbstractBeanFactory的作用 api里是这样说的…
对XML文件的解析基本上已经大致的走了一遍,虽然没有能吸收多少,但是脑子中总是有些印象的,接下来看下spring中的bean的加载,这个比xml解析复杂的多.这个加载,在我们使用的时候基本上是:BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("beanFactory.xml"));MyTestBean bean = (MyTestBean) beanFactory.getBean("myTe…
SpringMVC通过一个配置文件描述Bean以及Bean之间的依赖关系,利用Java的反射机制实例化Bean并建立Bean之间的依赖关系.IOC容器在完成这些底层工作的基础还提供了Bean的实例缓.生命周期.Bean实例代理等.BeanFacory是SpringMVC框架最核心的接口,他提供了最高级IOC的配置机制.ApplicationContext由BeanFactory派生而来,这也说明了 springMVC容器中运行的主体对象是 Bean,另外 ApplicationContext 继…
上文中我们学习了bean加载的整个过程,我们知道从spring容器中获取单例bean时会先从缓存尝试获取,如果缓存中不存在已经加载的单例bean就需要从头开始bean的创建,而bean的创建过程是非常复杂的,本文就开始研究bean加载这部分的源码. 1. bean创建流程分析 在Spring中bean加载的逻辑是在getSingleton的重载方法中实现的: public Object getSingleton(String beanName, ObjectFactory<?> singlet…