设为首页 加入收藏

TOP

Spring IOC容器(三)
2017-10-12 18:17:21 】 浏览:7464
Tags:Spring IOC 容器
查找两种

Spring容器是采用DI方式实现了IOC控制,IOC是Spring容器的基础和核心

DI概念

DI全称是Dependency  Injection,被译为依赖注入

DI的基本原理就是将一起工作具有关系的对象,通过构造方法参数或方法参数传入建立联系,因此容器的工作就是创建bean时注入那些依赖关系

IOC是一种思想,而DI是实现IOC的主要技术途径

DI主要有两种注入方式,即Setter注入和构造器注入

Setterr注入

通过调用无参构造器或无参static工厂方法实例化bean之后,调用该bean的setter方法,即可实现setter方式的注入

public class JDBCDataSource{

  private String driver;

  public void setDriver(String driver){

    try{

      Class.forName(driver);

      this.driver = driver;

      }catch(Exception e){

        throw new RuntimeException(e);

      }

     }

    //其他代码....

  }

在容器xml配置中,配置注入参数

<bean id = "dataSource"  class = "org.dao.JDBCDataSource">

  <property name = "driver"  value = "oracle.jdbc.OracleDriver"/>

  <property name = "url"  value = "jdbc.oracle:thin:@localhost:1521:XE"/>

  <property name = "user"  value = "openlab"/>

  <property name = "pwd"  value = "open123"/>

</bean>

构造器注入

基于构造器的注入是通过调用带参数的构造器来实现的,容器在bean被实例化的时候,根据参数类型执行相应的构造器

public class OracleUserDAO implements UserDAO{

  private JDBCDataSource dataSource;

  public OracleUserDAO(JDBCDataSource dataSource){

    this.dataSource = dataSource;

  }

  //其他代码.....

}

按构造器参数索引指定注入

<bean id = "dataSource"  class = "org.dao.JDBCDataSource">

  <property name = "driver"  value = "oracle.jdbc.OracleDriver"/>

  <property name = "url"  value = "jdbc:oracle:thin:@localhost:1521:XE"/>

  <peoperty name = "user"  value = "openlab"/>

  <peoperty name = "pwd"  value = "open123"/>

</bean>

<bean id = "userDAO"  class = "org.dao.OracleUserDAO">

  <constructor-arg index = "0"  ref = "dataSource"/>

</bean>

自动装配

Spring  IOC容器可以自动装配(autowire)相互协作bean之间的关联关系,autowire可以针对单个bean进行设置,autowire的方便之处在于减少xml的注入配置

在xml配置文件中,可以在<bean/>元素中使用autowire属性指定自动装配规则,一共有五种类型值

属性值为no:禁止自动装配,默认值;

属性值为byName:根据属性名自动装配,此选项将检查容器并根据名字查找与属性完全一致的bean,并将其与属性自动装配;

属性值为byType:如果容器中存在一个与指定属性类型相同的bean,那么将与该属性自动装配;

属性值为constructor:与byType的方式类似,不同之处在于它应用于构造器参数;

属性值为autodetect:通过bean类来决定是使用constructor还是byType方式进行自动装配,如果发现默认的构造器,那么将使用byType方式

配置示例:

<bean id = "userDAO"  class = "org.dao.OracleUserDAO">

  <constructor-arg index = "0"  ref = "dataSource"/>

</bean>

<bean id = "userService"  class = "org.service.UserService"  autowire = "byType"/>

上述配置,在UserService中如果存在接收UserDao类型的方法Setter方法,Spring就可以自动将userDAO对象注入进去

(自己总结,仅供参考。)

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇log4j.properties 配置示例 下一篇【Struts2】工作流程

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目