![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
spring
jackson陈
这个作者很懒,什么都没留下…
展开
-
spring @DependsOn 实现@Value动态刷新
@DependsOn注解可以控制bean的加载顺序当A依赖B时,因为并不知道A与B谁先优先加载,可以再A类上添加次注解去依赖B这时当先加载了B 时,会实例化B并且注入属性,但是B中的Bean并不会加载。例子:实现@Value属性注入从数据库加载的数据。1、从数据库拿配置@Configurationpublic class DbConfig { /** * 这个就是查询service */ @Autowired private DbSe.原创 2020-07-06 15:53:18 · 1797 阅读 · 0 评论 -
@Value的用法 @Value数据来源 @Value动态刷新的问题
从用法和底层梳理,比较详细。原链接地址总结下编程思想:无论何种介质的配置,加载到本地后封装好,在初始化bean时碰到@Value注解去封装好的类中去解析得到key对应的value,赋值到类的属性。动态刷新时,碰到需要动态刷新的类,直接重新实例化该类就可以了(重新走下@Value解析流程)...转载 2020-05-20 17:23:39 · 5206 阅读 · 0 评论 -
spring4.2.9 java项目环境下ioc源码分析(七)——refresh之obtainFreshBeanFactory方法(@5自定义标签解析)
接下来我们看下bean是默认标签的情况spring是怎么解析的。首先我们先自己做一个自定义标签。然后具体分析下面列出步骤1、定义javabean2、定义一个xsd文件描述javabean的内容3、创建一个Java类继承AbstractSingleBeanDefinitionParser用来解析xml的内容4、创建一个Java类继承NamespaceHandlerSupport,实现init方法用于...原创 2018-04-27 19:44:03 · 389 阅读 · 0 评论 -
spring4.2.9 java项目环境下ioc源码分析(八)——refresh之prepareBeanFactory方法
在完成解析,把所有的BeanDenifition注册到bean工厂完成后,开始执行prepareBeanFactory方法。这个方法是配置工厂的标准上下文特征。具体看代码 protected void prepareBeanFactory(ConfigurableListableBeanFactory beanFactory) { //设置beanFactory的classLoader为当前c...原创 2018-04-28 10:45:37 · 1017 阅读 · 0 评论 -
spring4.2.9 java项目环境下ioc源码分析 (九)——refresh之postProcessBeanFactory方法
postProcessBeanFactory后处理beanFactory。时机是在所有的beanDenifition加载完成之后,bean实例化之前执行。比如,在beanfactory加载完成所有的bean后,想修改其中某个bean的定义,或者对beanFactory做一些其他的配置,就可以用此方法。在系列文章中,可以实现ClassPathXmlApplicationContext类并重写post...原创 2018-04-28 13:49:46 · 3359 阅读 · 0 评论 -
spring4.2.9 java项目环境下ioc源码分析 (十)——refresh之invokeBeanFactoryPostProcessors方法
invokeBeanFactoryPostProcessors执行BeanFactory后置处理器,当然前提是你已经在容器中注册过此处理器了。protected void invokeBeanFactoryPostProcessors(ConfigurableListableBeanFactory beanFactory) { PostProcessorRegistrationDelegate...原创 2018-04-28 16:14:22 · 1743 阅读 · 2 评论 -
spring4.2.9 java项目环境下ioc源码分析 (十三)——refresh之initApplicationEventMulticaster方法
初始化应用事件广播器。这事观察者模式得典型应用。我们知道观察者模式由主题Subject和Observer组成。广播器相当于主题Subject,其包含多个监听器。当主题发生变化时会通知所有得监听器。代码很简单protected void initApplicationEventMulticaster() { ConfigurableListableBeanFactory beanFactory ...原创 2018-05-07 16:17:44 · 1468 阅读 · 0 评论 -
spring4.2.9 java项目环境下ioc源码分析 (十四)——refresh之onRefresh方法
这个方法是空的。解释是在特定的上下文中初始化特别的beans。可以看到其也是用于初始化的。看了StaticWebApplicationContext、AbstractRefreshableWebApplicationContext、GenericWebApplicationContext的实现都是一样的代码用于初始化主题。略过。。。。。...原创 2018-05-07 16:27:25 · 1100 阅读 · 0 评论 -
spring4.2.9 java项目环境下ioc源码分析 (十五)——refresh之registerListeners方法
注册监听器,与广播器是同时存在的。在广播器章节,spring只是初始化的广播器,但是并没有为广播器绑定Listener。Spring在此方法中进行了绑定。下面看代码protected void registerListeners() { // 和手动注册BeanPostProcess一样,可以自己通过set手动注册监听器 for (ApplicationListener<?> ...原创 2018-05-08 09:49:39 · 1410 阅读 · 1 评论 -
spring4.2.9 java项目环境下ioc源码分析(六)——refresh之obtainFreshBeanFactory方法(@4默认标签bean,beans解析、最终注册)
接上篇文章,解析了import和alias标签,只是开胃菜比较简单,下面介绍bean标签的加载,也是默认命名空间下解析的重点。protected void processBeanDefinition(Element ele, BeanDefinitionParserDelegate delegate) { //解析bean标签,返回其包装类 BeanDefinitionHolder bdH...原创 2018-04-27 15:51:30 · 471 阅读 · 0 评论 -
spring4.2.9 java项目环境下ioc源码分析(五)——refresh之obtainFreshBeanFactory方法(@3默认标签import,alias解析)
接上篇文章,到了具体解析的时候了,具体的分为两种情况,一种是默认命名空间的标签<bean>;另一种是自定义命名空间的标签比如<context:xxx>,<tx:xxx>等。先看下默认的命名空间的标签解析。protected void parseBeanDefinitions(Element root, BeanDefinitionParserDelegate d...原创 2018-04-26 17:15:50 · 389 阅读 · 0 评论 -
shiro集成spring初始化分析
记录下学习shiro的过程,原来学过一边,不过忘得这也差不多了,这次就不打算复习一遍了,而是从源码开始看。希望这次可以记住的时间长点。这次的入口是DelegatingFilterProxy类,其在web.xml中以filter的配置存在,先看一下配置:<filter> <filter-name>shiroFilter</filter-name> <fi...原创 2018-01-29 10:25:30 · 609 阅读 · 0 评论 -
Spring 依赖注入之造轮术(上)
最近有时间看了一下spring Ioc的源码,了解了spring bean加载 ,实例化与注入的大体流程,细节方面看的不是很深(其实是看的一脸懵逼),所以想自己造下轮子,自己实现spring ioc.在这之前,首先说一下spring ioc的大体流程,本文章都是依赖自己所看、所学、所想写出,难免有理解不到位,希望各位看官及时提出建议。spring 的ioc容器分为两类,一类是基础的IOC容器即be...原创 2018-01-19 14:52:10 · 229 阅读 · 0 评论 -
spring4.2.9 java项目环境下ioc源码分析(一)——执行refresh之前
本系列文章讲述spring IOC容器如何加载Bean与实例化Bean以及其中所穿插的一些实现。本文章以ClassPathXmlApplicationContext为起点,debug启动流程。代码如下public static void main(String[] args) {ClassPathXmlApplicationContext context= new ClassPat...原创 2018-04-04 13:15:56 · 673 阅读 · 1 评论 -
spring4.2.9 java项目环境下ioc源码分析(三)——refresh之obtainFreshBeanFactory方法(@1准备工作与加载Resource)
obtainFreshBeanFactory方法从字面的意思看获取新的Bean工厂,实际上这是一个过程,一个加载Xml资源并解析,根据解析结果组装BeanDefinitions,然后初始化BeanFactory的过程。在加载Xml文件之前,spring还做了一些其他的工作,比如说判断是否已经存在容器,创建Beanfactory并设置忽略自动装配等等。下面结合代码具体看看1、准备工作。在spring...原创 2018-04-23 11:19:59 · 2329 阅读 · 2 评论 -
spring4.2.9 java项目环境下ioc源码分析(四)——refresh之obtainFreshBeanFactory方法(@2处理Resource、加载Document及解析前准备)
接上篇文章,上篇文章讲到加载完返回Rescouce。先找到要解析的代码位置,在AbstractBeanDefinitionReader类的loadBeanDefinitions(String location, Set<Resource> actualResources)的方法中,要继续的是int loadCount = loadBeanDefinitions(resources);@...原创 2018-04-23 13:08:47 · 579 阅读 · 0 评论 -
spring4.2.9 java项目环境下ioc源码分析(二)——refresh之prepareRefresh方法
接上篇文章,上篇讲到了refresh之前,做了一些什么事。接下来就是refresh方法了。具体方法如下public void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) { // Prepare this context for re...原创 2018-04-19 19:01:47 · 1107 阅读 · 0 评论 -
spring4.2.9 java项目环境下ioc源码分析 (十一)——refresh之registerBeanPostProcessors方法
接上篇文章,registerBeanPostProcessors从名称可以看出是用来注册BeanPostProcessor的。在讲解这个方法之前先看下什么是BeanPostProcessor,下面是BeanPostProcessor的代码,可以看出只有两个方法。public interface BeanPostProcessor { Object postProcessBeforeInitia...原创 2018-05-02 13:54:21 · 1734 阅读 · 2 评论 -
spring4.2.9 java项目环境下ioc源码分析 (十二)——refresh之initMessageSource方法
国际化。。。。,我估计写的应用也不会出国了,不讲了。。。。原创 2018-05-02 15:02:27 · 430 阅读 · 0 评论 -
Spring 依赖注入之造轮术(下)
因为我们一般是Web开发,所以本文的环境是web环境。有jetty有servlet(自己实现)。git源码https://github.com/chenguangju/config/tree/master/my-spring我的逻辑是这样的,程序启动就去加载classpath下的某个配置文件,然后解析转换成BeanInfo对象,然后存入Map中,然后开始实例化,取出Map中的BeanInfo对象,...原创 2018-01-22 13:25:10 · 304 阅读 · 0 评论