软件开发专业网

15837636235

地址:无锡国家软件园
网 址:www.javaandc.com
邮 箱:renaide#126.com
手  机:15837636235
邮  编:100000
传 真:15837636235

java技术 > spring IOC

spring IOC
发布时间:2014-11-16 新闻来源:软件开发专业网 浏览次数:892000

   一、IOC


  Inversion of Control

  控制反转

  创建对象的方式由第三方框架介入管理

  通过配置文件的方式进行对象创建。优点:

  降低耦合

  实现方式:

  1、依赖注入(Depandency Injection)

  通过spring容器对已存在具备依赖关系

  的bean对象,通过 构造器 以及 setter

  方法进行关系管理

  特点:

  1、管理对象间的依赖关系

  UserService userService

  UserDao userDao

  2、管理方式

  1、构造器注入:通过构造器进行管理

  <bean>

  <constructor-arg index="参数索引" />

  </bean>

  注意:bean中有几个constructor-arg

  就调用具备几个参数的构造函数

  <constructor-arg index="参数索引" />

  可以替换成

  <constructor-arg name="参数名称" />

  2、setter注入:通过setter方法进行管理(重点)

  bean 类中提供 属性 ,并且为属性提供setter方法

  配置文件中

  <bean>

  <property name="属性名称" value="具体值" />

  <property name="属性名称" ref="引用bean" />

  2、依赖查找

  二、自动装配

  Spring IOC 可以通过自动装配的方式,相互想做bean

  之间的关联关系

  目的:为了减少xml的配置

  autowird :

  no : 默认,不进行自动装配

  byType : 根据bean的属性类型,在容器中

  进行搜索,如果匹配到类型相同的bean

  则进行注入

  byName : 根据bean的属性名称,

  在容器中进行搜索,如果匹配到bean的

  id 或  name 属性与 属性名称一致的话

  则进行注入

  constructor:按照构造函数进行注入

  autodetect:

  依赖 、 注入

  依赖:对象与对象之间的关系

  注入:用容器来进行管理

  依赖注入:通过容器管理对象之间的关系

  1、容器通过setter方法管理对象之间的关系

  (setter注入)

  UserDaoImpl

  UserService

  public class UserService{

  private UserDaoImpl userDaoImpl;

  public void setUserDaoImpl(UesrDaoImpl userDaoImpl){

  this.userDaoImpl = userDaoImpl;

  }

  }

  2、构造器注入

  public class UserService{

  private UserDaoImpl userDaoImpl;

  public UserService(UserDaoImpl u){

  this.userDaoImpl=u;

  }

  }

  <bean>

  <constructor-arg index="0">

  <constructor-arg index="1">

  </bean>

  <bean>

  <constructor-arg name="u">

  </bean>

  三、参数注入

  a、基本值注入

  <bean id="" class="">

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

  </bean>

  <bean id="" class="">

  <property name="name">

  <value>val</value>

  </property>

  </bean>

  b、注入bean对象

  1)内部bean(不推荐)

  <bean id="" class="">

  <property name="jdbcDataSource">

  <bean class="dao.JDBCDataSourceDao">

  <property name="driver" value="">

  </bean>

  </properety>

  2)外部bean(推荐)

  <bean id="ds" class="dao.DataSource">

  </bean>

  <bean id="empDao" class="">

  <property name="ds" ref="ds" />

  </bean>

  c、注入 "" 值

  <bean>

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

  <property name="">

  <value />

  </property>

  d、注入 null

  <bean>

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

  <property name="">

  <null />

  </property>

  e、注入集合

  List<String>

  Set

  Map

  Properties

  List:

  <bean>

  <property name="someList">

  <list>

  <value></value>

  <value></value>

  </list>

  </property>

  Set:

  <bean>

  <property name="someSet">

  <set>

  <value></value>

  <value></value>

  <value></value>

  </set>

  Map:

  <bean>

  <property name="someMap">

  <map>

  <entry key="" value=""></entry>

  <entry key="" value=""></entry>

  <entry key="" value=""></entry>

  </map>

  在spring容器中定义集合,然后再注入给

  某个Javabean属性

  <util:list>

  <value></value>

  </util:list>

  <util:set>

  <value>

  </util:set>

  <util:map>

  <entry key="" value=""></entry>

  </util:map>

  <util:properties>

  <prop key=""></prop>

  </util:properties>

  添加xmlns

  1、复制

  xmlns:jee="http://www.springframework.org/schema/jee"

  粘贴一份 将 jee 改成 util

  结果

  xmlns:jee="http://www.springframework.org/schema/util"

  2、复制

  http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd

  粘贴一份

  将jee改为 util

  http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd

  四、注入spring表达式

  spring提供表达式 类似于 jsp中EL表达式

  用于注入 properties文件中的值

  1、将配置文件读取到spring容器中

  <util:properties id="jdbcProps" location="classpath:com/tarena/dao/mysql/db.properties" ></util:properties>

  2、读取配置文件

  <bean>

  <property name="" value="#{jdbcProp.driver}"></property>

  </bean>
首页