spring
bruk_spp
长期从事嵌入式软件开发,对android上中下都很了解。
展开
-
spring xml配置文件的加载解析过程
1. 从XmlBeanFactory这个IOC容器的视野来看下XML配置文件是如何被加载来实现IOC能力的1.首先会New 一个 XmlBeanDefinitionReader 对象。这个对象是解析XML配置文件的入口,然后给一个具体的配置文件地址封装一个Resource对象,然后调用XmlBeanDefinitionReader 的loadBeanDefinitions函数开始加载解析配置文件...原创 2019-07-30 18:53:00 · 533 阅读 · 0 评论 -
spring Lifecycle容器级别的回调
1.其拉起的地方是在context初始化的结尾AbstractApplicationContext.java文件refresh首先初始化生成一个DefaultLifecycleProcessor对象然后将beanFactory注入接着调用onRefresh()函数把所有满足条件的start,看代码实现上面大体意思,就是从Bean中找到所有的Lifecycle接口的类,然后实例化后.进行...原创 2019-09-21 14:27:56 · 165 阅读 · 0 评论 -
spring Conditional注解源码解析
Conditional.class这个类是选择类的注册Bean.其定义如下:1.就一个value参数.这个参数是默认参数,所以一般直接不用写属性名,直接写属性值就好了.2.要注意的是属性值必须是接口类Condition的实现者,其定义如下主要是实现matches这个抽象接口.通过它来决定要不要加载这个bean其实现源码在AnnotatedBeanDefinitionReader.java中...原创 2019-09-20 21:59:44 · 290 阅读 · 0 评论 -
spring ModelAttribute属性解析
ModelAttribute这个属性的解析主要是在 RequestMappingHandlerAdapter.java里做的这个属性的解析主要有两次.第一次:在RequestMappingHandlerAdapter这个类被初始化的时候,由于该类继续InitializingBean接口.使用在使用getBean生成该对象时候,会调用.afterPropertiesSetafterProper...原创 2019-09-19 22:35:23 · 719 阅读 · 0 评论 -
静态工厂方法和实例工厂方法注入bean实现原理
先从网上分别找两个不同实现的配置静态工厂注入实例化静态工作注入我来先来看看spring对工厂注入配置的解析.在文件BeanDefinitionParserDelegate.java里面parseBeanDefinitionAttributes函数里有这么两句话来解析xml配置,这个定义如下CONSTRUCTOR_ARG_ELEMENT属性获取是在另外一个函数里,大家有兴趣自己去研究.大...原创 2019-09-18 23:15:43 · 1053 阅读 · 0 评论 -
DispatcherServlet的初始化
先看流程图1.首先在WEB.xml里面配置的是DispatherServlet,所以起点是以DispatcherServlet对象.而这个对象又是frameworkServlet和HttpServletBean的子类也是java 的servlet子类初始化的起点是其父类的init方法.截图看方法的实现代码比较简洁.首先是看servle里面是否含有property配置,如果有则拿过来.然后直...原创 2019-09-06 21:11:22 · 1258 阅读 · 0 评论 -
web环境下的IOC容器初始化
先来看个流程图首先IOC启动是由其运行环境的容器拉起来的,我们来看一个web.xml配置就知道了记得上面两个高亮处.1.contextInitialized首先ContextLoaderListener的contextInitialized函数是最开始的地方,也是应该由运行的容器调用的地方.我们来看下ContextLoaderListener的类的描述说明这里说的很明白start up ...原创 2019-09-06 15:58:50 · 468 阅读 · 0 评论 -
使用ObjenesisCglibAopProxy方式实现aop
1.获取代理对象实例getObject函数会调用getProxy函数.在使用第三方AOP实现cglib库时,调用的是cglibAopProxy的getProxy实现.这个实现源码截图如下:这里使用enhancer类进行封装,具体实现很是复杂.有部分源码没有需要自己下载cglib库的实现源码才能查看.我们这里只关心Aop的实现.而这个实现关键就是上面标亮的getCallbacks函数调用.看下这...原创 2019-09-01 14:42:08 · 992 阅读 · 0 评论 -
spring property 属性注入详解
我的上一篇文章上面有比较详细的说角getBean的流程。其中对propery注入的过程通过画的流程图比较清楚的展现出来。最终是通过BeanWrapperImpl类的setValue方法来完成property注入。但是究竟是怎么样获取method然后invoke的,还不太清楚。我的想法是代码里面应该有set+Name 和get+ Name进行组合字符串的操作,但实际上并不是这样的。流程是这样的先看流...原创 2019-08-16 17:30:07 · 15463 阅读 · 0 评论 -
proxyfactorybean aop实现过程
我们首先来看一下使用Proxy 获取Bean对象的流程1 对于代理工场类的Bean对象获取是通过 getObject 函数来创建对象的.通过 分析ProxyFactoryBean类来看下其AOP实现原理2.调用初始化函数initializeAdvisorChain首先会通过一个boolean变量判断当前是否已经初始化过,如果有则返回其次会判断我们XMLbean对象里面是否有拦截器int...原创 2019-08-25 19:29:31 · 539 阅读 · 0 评论 -
spring xml解析详解
文件DefaultBeanDefinitionDocumentReader.java首先解析入口是doRegisterBeanDefinitions这个函数。1.首先创建一个ParseDelegate的类,第一次创建this.delegate没有被赋值为NULL.相当于 this.delegate = createDelegate(getReaderContext(), root, NUL...原创 2019-08-09 19:27:25 · 4562 阅读 · 0 评论 -
spring bean对象的生成及数据注入的时机 -》getBean
大家都知道在spring中bean对象的生成分两类一类是预加载,也就是说在容器初始化的时候把bean注入生成的事情一起干了。另一类是需要开发者主动调用getBean来获取bean对象。1.预加载函数截图如下通过上面的代码来看,什么样的bean可以被预加载呢?需要满足以下条件:1.不能是抽象类 2.需要是单例 3.懒加载属性值要为false不管是预加载还是自己手动调用的加载,都是调用getBe...原创 2019-08-13 19:30:16 · 1484 阅读 · 0 评论 -
@Service @Repository @Controller @Configuration注解类的首次加载
这几个注解全是@Component注解,它们的解析在ClassPathBeanDefinitionScanner.java看其构造函数的初始化这个是默认的扫描过滤filter,其中就有component.来看下过滤规则如代码所以只要该类拥有Component的注解类就算通过.下面来看下如何扫描的这里大体描述下,具体的看代码实现.1.首先package目录下所有文件,找到满足条件的类,就是满足...原创 2019-10-06 12:20:45 · 899 阅读 · 0 评论