• Spring 源码解析(持续集成,哈哈)


    1:为什么要学Spring

    在我看来学Spring其实没那么高大上,只是这个东西大家都在用,而且又非常实在,所以要用,在此,必须要说说他的设计

      1:基于 POJO 的轻量级和最小侵入性编程;

      2: 通过依赖注入和面向接口松耦合;

      3: 基于切面和惯性进行声明式编程;

      4:通过切面和模板减少样板式代码;

    基于以上的设计,所以,这个叫春的软件被大家所广泛使用

    2:特性(优点)

      IOC:容器思想,大家都会说控制反转,最主要的操作,就是把Bean的产生交给了Spring,而不是我们平常的new(通俗易懂,底层也就是(key,value)的形式储存)     

      解释:IOC(Inversion of Control)控制反转:所谓控制反转,就是把原先我们代码里面需要实现的对象创建、依 赖的代码,反转给容器来帮忙实现。那么必然的我们需要创建一个容器,同时需要一种描述来让容器知 道需要创建的对象与对象的关系。这个描述最具体表现就是我们可配置的文件。

      AOP:切面思想,这个就更简单了,在我理解就是对同一类事物的统一规划,也就中国人所说的,物以类聚,人以群分。。。

      DI:这是一个有趣的机制,Spring初始化之后,Bean的容器也就是IOC,那么DI就是在适当的时候,加载已经提交控制权的类,A如果用到B,那么就会优先加载B,这样就可以再使用的时候不会报错。(构造方法/setter/接口注入)

      划重点:

      DI(Dependency Injection)依赖注入:就是指对象是被动接受依赖类而不是自己主动去找,换句话说就 是指对象不是从容器中查找它依赖的类,而是在容器实例化对象的时候主动将它依赖的类注入给它。

    3:源码剖晰

      IOC (所有的容器都是单例的,要动态加载。存在形式map)

      一:入口类ClassPathXmlApplicationContext

      点到最后是一个BeanFactory interface,他有三个子接口  1:ListableBeanFactory  可列表化bean 2:HierarchicalBeanFactory 层级化 3:AutoWiredBeanFactory 可以自动装载的bean

     最后默认实现前面全部接口的实现类,也是基础实现:DefaultListableBeanFactory 。而之后我们会发现ApplicationContext ,这个接口实现了很多高级的功能,是一个比较高级的容器(相比较其他的XmlPathApplicationContext)

      二:BeanDefinition

      Spring的初始化中,包含三个步骤,定位(Resource),加载(loadBeanDefinition),注册(init),刚开始会将所有的bean转化成beanDefinition的结构,然后开始在IOC容器中注册,存储类型map key为bean的名称或别名,value为beanDefinition (开始时会检查id相同的是否存在,若存在则不能建立,因为为单例)

      AOP(面向切面编程)

      对于Aop,其实我个人感觉对aspectj的理解,就是对AOP的理解 spring+aspect 就是SpringAop不知道这样理解是否正确(?)

      切入点,切面,织入 ,然后,再加上通知的方式(类型)before,around,after afterReturning(finally部分), After-throwing。

      对于切入点,可以自定义表达式,@Pointcut,再加上execution(public * *(..))l

      第一步,加载配置信息解析成AopConfig

      第二步,交给AopProxyFactory,调用一个createAopProxy的方法

      第三步,jdkDynamicAopProxy调用AdvisedSupport的getInterceptorsAndDynamicInterceptionAdvice方法得到方法拦截器链,保存到容器中。

      第四部,递归执行拦截器方法,处理代理对象

      

    如有错误,请邮件zs253499660@sina.com,如有更好的方法,可以推荐
  • 相关阅读:
    SQL Server 索引的自动维护 <第十三篇>
    SQL Server 索引的图形界面操作 <第十二篇>
    python处理时间戳
    今天又犯了Java/Scala里面substring的错误
    新浪系统工程师笔试--shell
    把DEDE的在线文本编辑器换成Kindeditor不显示问题
    C语言 EOF是什么?
    Windows Server 2012 R2超级虚拟化之七 远程桌面服务的增强
    C++数据结构之最小生成树
    python sqlite 查询表的字段名 列名
  • 原文地址:https://www.cnblogs.com/senjiang/p/10657565.html
Copyright © 2020-2023  润新知