敖胤

绳锯木断,水滴石穿;聚沙成塔,集腋成裘。

导航

Spring IOC简单总结

一、依赖注入定义

将调用者对接口实现类的依赖关系,从程序中移除,转交由spring容器来管理,spring在运行时将调用者依赖的实现类填充进来。也就是说,组件之间的依赖关系,是在程序运行期间由第三方来管理的。

将调用者为完成功能所需的实现类,在运行期间由第三方容器自动填充给调用者,这就是依赖注入的核心思想。

二、几种Simple Object对象

  • POJO :Plain Old Java Object 简单Java对象(普通Java类)
  • VO :Value Object 值对象(View Object 视图展示对象)
  • PO :Persistent Object 持久化对象 (一般用于与数据库表对应)
  • DTO :Data Transfer Object数据传输对象
  • DAO :Data Access Object 数据访问对象

Spring Bean:具有唯一ID的simple object对象。

三、BeanDefinition

在容器内部,bean定义由BeanDefinition对象来表示,该对象包含以下信息:

  • 全限定名,就是bean的实际实现类。
  • bean行为模式,包括:bean的创建模式(singleton/prototype)、自动装配模式、依赖检查模式、初始化及销毁方法。这些定义决定bean在容器中的行为。
  • 构造器参数及属性值。例如使用bean来定义连接池,可以通过属性或者构造器参数指定连接数及连接池大小等。
  • bean之间的依赖。

四、Bean的基本属性

  1. class :指定实例化对象的类型。
  2. name/id :bean的标识符。
  3. scope: bean的作用域。
  4. constructor arguments:使用构造器参数来注入依赖关系。
  5. autowiring mode:指定自动装配模式。
  6. dependency checking mode:依赖检查模式。
  7. lazy-initialization mode:懒加载模式。

五、IOC容器类型

  • BeanFactory:轻量级的IOC容器,负责容纳与管理bean的生命周期及其依赖关系。尽可能晚的初始化Bean
  • ApplicationContext:继承了BeanFactory接口,是BeanFactory功能的延申。尽可能早的初始化Bean。支持国际化和事件监听。

六、注入方式

  • setter注入:在接受注入的类中定义一个set方法,并在参数中定义所需要的注入元素。
  • 构造器注入:通过构造方法参数的方式注入。
  • 接口注入:在接口中定义要注入的信息。由于该方式繁琐且侵入性过高,Spring没有提供实现。

七、注入方法

  • set方法:使用setter方式的注入。

  • 构造器方法:使用构造器方式注入。

  • 静态工厂方法:通过工厂的静态方法获取

    <bean name="userService" class="org.silence.service.UserService">
    	<property name="staticUserDao" ref="staticUserDao" />
    </bean>
    <bean name="staticUserDao" class="org.silence.Factory" factory-method="initUserDao"></bean>
    
  • 实例工厂方法:取对象实例的方法不是静态的,所以你需要首先new工厂类,再调用普通的实例方法。

    <bean name="userService" class="org.silence.service.UserService">
    	<property name="staticUserDao" ref="staticUserDao" />
    </bean>
    <bean name="staticUserDao" factory-bean="factory" factory-method="initUserDao"></bean>
    <bean name="factory" class="org.silence.Factory"></bean>
    
  • Lookup方法:使用CGLIB生成一个代理类,重写bean中定义的lookup方法。一般用于单例类需要创建一个非单例类的成员的情形。

    public abstract class CommandManager{
        public Object process(){...}
        protected abstract Command createCommand();//此方法被重写
    }
    
    <bean id="command" class="org.silence.Command" scope="prototype"/>
    <bean id="commandManager" class="org.silence.CommandManager" >
    	<lookup-method name="createCommand" bean="command"/>
    </bean>
    

八、Bean作用域scope

  • singleton:单例模式,全局共享一个Bean对象,线程不安全。

  • prototype:原型模式,每次调用重新生成一个Bean对象,线程安全。


  • request:每次请求生成一个Bean对象。

  • session:每个会话共享一个Bean对象。

  • global session:全局共享。

九、Bean的生命周期

  1. BeanFactory方式

  1. ApplicationContext方式

posted on 2021-07-04 22:04  敖胤  阅读(45)  评论(0编辑  收藏  举报