Tag Archives | spring

Netflix源码解析之Eureka:Eureka client 注册过程

记录下eureka client如何将本地服务的注册信息发送到远端的注册服务器eureka server上。不像上文中讲到的get操作,服务需要自己发起读取注册信息来进行自己后续的服务调用。服务注册可以认为是Eureka client自己完成,不需要服务来费心。

实现思路其实也挺简单,在com.netflix.discovery.DiscoveryClient启动的时候,会初始化一个定时任务,定时的把本地的服务配置信息,即需要注册到远端的服务信息自动刷新到注册服务器上。

客户端
1. 在DiscoveryClient中初始化一个InstanceInfoReplicator,其实里面封装了以定时任务。

2. 以initialDelayMs为间隔调用
[crayon-5a1690f01e00656866518[......]

阅读全文

Tags: , , ,

Comments { 2 }

Spring IOC之Bean的定义和解析

理解spring ?IOC 就是能把对象之间的依赖关系给配出来,像下面最典型的一个配置文件。

定义了一个bean ?dataSource,并把它注入到另外一个bean sessionFactory中。

这里尝试整理下一个死的配置文件如何在spring中变出活的对象,并且是一个个互相有关系的对象。

首先要关注下定义在 org.springframework.context 包下的ApplicationContext 。正是contenxt为是 Spring 提供一个运行时的环境,发现每个 Bean 之间的关系,为它们建立这种关系并且要维护好这种关系。IOC容器指的应该就是这种关系集合。

ApplicationContext 是 Context 的顶级父类,可以看到他有多少种实现:

sping_applictionContext

容器初始哈[......]

阅读全文

Tags: , , ,

Comments { 2 }

Spring IOC之Bean的创建

上一篇文章讲述了从配置文件到Bean定义的过程。容器初始化完成后,在IOC容器内建立了BeanDefinition,具体的依赖关系还没有注入。当使用者第一次向IOC容器请求Bean时,IOC容器才会对这个Bean注入的依赖关系。在依赖注入完成后,使用者调用getBean方法来获得bean。不难想象这个bean创建的过程一定是一个递归的的。当我们要创建一个bean时,会递归的在context中查找需要的bean来递归创建;在依赖注入的时候,一直要获取当前bean依赖的bean,对依赖的bean进行创建和注入。

  1. ?AbstractBeanFactory ?getBean

2.??doGetBean

3. ??AbstractAutowire[......]

阅读全文

Tags: , ,

Comments { 1 }

Spring 源码之AOP

前言

整理前面spring源码中aop的部分,主要梳理主要的调用关系,期望能看出来目标对象的代理是实现的,定义的增强操作怎样被插入到目标方法的执行中去的。根据proxy的创建,和调用为主要线索。为了使得线索上简单,做了如下简化:

  • 作为两种代理方式只是介绍了JdkDynamicAopProxy ,省略了ObjenesisCglibAopProxy,关于CGLIB的可以参照?AOP 的利器:ASM 3.0 介绍
  • ?省略了Advisor,Advice,Point这些角色的解释及其使用详细,这三个重要接口在使用中的实现还是有挺多细节的。
  • ?顺序的调用关系的代码都贴出来,但是了解主要逻辑,只要关注高亮部分即可。
  • 关于FactoryBean的使用时spring IOC的内容,没有展开
  • 另外一种Proxy创建的工厂ProxyFactory未介绍
  • JdkDynamicAop[......]

阅读全文

Tags: , , ,

Comments { 0 }