`

Spring IOC

 
阅读更多

很早就在学习Spring,但是发现很多东西没有深入挖掘,很多知识点,看过之后当时貌似懂了,但是过段时间一点都不会用了,所以打算系统学习下顺表整理出来,以备以后重新回顾。

本篇主要探讨以下问题:

一:IOC和DI到底是什么?

二:IOC能够解决什么样的问题?

三:IOC由哪些模块组成?

四:学习Spring Resource和ResourceLoader以及资源加载模式ant匹配

五:学习BeanFactory和ApplicationContext以及BeanFactory和ApplicationContext的Bean生命周期

六:Spring三种装配Bean的方式 XML、基于注解、基于JAVA类

七:Spring Bean的作用域,单例的DAO如何保证线程安全

八:Spring IOC如何解决Bean循环依赖的问题?

九:如何实现一个Spring IOC容器?

 

一:IOC和DI到底是什么?

    其实理解了发现是个很简单的概念,可是配上这些高大上的名词,瞬间有点让人头晕。关键是理解了转化成自己的语言,下次一看,原来就是这样。先看个简单的例子(假设A接口依赖B接口):

 

// 通常做法
A {
 B b = new BImpl();
}
// Spring 做法
A {
 B b;
 public void setB(B b) {
 }
}
  第二种情况B的具体类由Spring IOC注入到方法中,这个其实咋一看和我们使用的工厂模式没有什么区别。其实区别在于这里B b是由Spring容器注入进去的,我们的方法是通过我们手动的,一个是自动的,一个是手动的。
// 我们的使用方式
main() {
   A a = new A().setB(BeanFactory.createBeanB)
}

// Spring的方式 配置好之后,运行时候自动注入Bean了,思考它是怎么做到的呢?
// 我的大致思路,启动时,Spring一个线程读取资源文件,创建Bean和依赖的Bean属性。
    我们现在应该对IOC有个大概的理解了吧,现在我们再来谈谈IOC和DI这两个概念。

    IOC(控制反转):谁控制谁,控制什么? 通常,我们的程序来控制对象的创建,但是在IOC中对象的创建是由Spring容器来控制统一创建的。

    反转:既有反转,当然亦有正转。正转的含义,程序主动的控制对象的创建。反转的含义,程序只能被动的等待Spring 容易来注入对象。

    DI(Dependency Injection):其实是在发现IOC不能很好表现初Spring容器处理的依赖关系,所以才出了依赖注入这个名词。

  

二:IOC能够解决什么样的问题?

    我觉得有一下几点吧,

    a) 降低代码的耦合性 维护的时候想切换依赖只要改改配置就好了

    b) 测试的时候很方便吧,直接接口Mock就好了,不用依赖具体的类。

 

三:IOC由哪些模块组成?



 
 四:学习Spring Resource和ResourceLoader以及资源加载模式ant匹配

 

 五:学习BeanFactory和ApplicationContext以及BeanFactory和ApplicationContext的Bean生命周期




    我的理解BeanFactory和ApplicationContext的区别大致有两个:

    1. BeanFactory 初始化的时候不加载单例对象,第一次调用的时候才加载。

        ApplicationContext启动的时候就加载所有的单例Bean。

    2. ApplicationContext启动的时候会自动识别配置中的Processor并将它注册在上下文中而BeanFactory则需要手动添加才能在Bean的生命周期中起作用。

 

 

七:Spring Bean的作用域,先抛出几个问题

    1. 默认的作用域是什么?

    2. DAO 默认是singleton,如何保证线程安全? 

 

 

  • 大小: 20.1 KB
  • 大小: 24.3 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics