• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

三木筒子

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

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,如有更好的方法,可以推荐

posted on 2019-04-05 01:04  森酱  阅读(140)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3