首页 > 代码库 > spring学习(一)

spring学习(一)

spring的核心是IOC和DI,首先要明白IOC和DI的概念。

IOC,即Inverse of Control,反转控制,就是将原本在程序中手动创建service对象的控制权交给spring容器管理,简单的说就是对象的创建权交给了spring容器管理。

DI,即Dependency Injection,依赖注入,在web应用中,action调用service层,service调用dao层,也就是action依赖service,service依赖dao,而在spring容器管理对象时,在创建bean对象的同时,会讲他依赖的对象一起注入。

个人认为,有依赖就会有反转,不使用spring时,action需要service的方法,就自己手动创建,需要什么方法就创建什么方法;使用spring容器管理时,容器中提供了什么方法,你就只能用什么方法。

使用spring管理对象时,spring会将对象依赖的属性一同注入,代码如下:

applicationContext.xml:

<beans xmlns="http://www.springframework.org/schema/beans"

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xsi:schemaLocation="

http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

   <bean id="userService" class="对象的完整路径类名">

    <property name="username" value="http://www.mamicode.com/admin"/>

  </bean>

服务器端:

//1、初始化spring容器

ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");

// 2、 从容器获得需要Bean <bean id="userService" ..>

IUserService service = (IUserService) applicationContext.getBean("userService") ;// spring容器得到管理Bean对象

// 3、 调用service中的业务方法

service.login();

</beans>

 备注:ApplictionContext接口是BeanFactory接口的子接口

 区别:BeanFactory会延迟加载配置文件中的bean对象,当调用getBean时, 才会创建Bean对象;

    ApplicationContext会在加载配置文件时,完成Bean对象的创建和注入。

spring依赖注入的方式有两种:1、构造函数依赖注入 2、setter方法注入

1、构造函数依赖注入:

实体类book

public class Book{

  private string name;

  private double price;

  //构造时,将name和price注入car对象

  public Book(String name,double price){

    super();

    this.name=name;

    this.price=price;

  }

}

applicationComtext.xml

<bean id="book" class="book类的完整路径名">

  <constructor-arg index="0" type="java.lang.String" value=http://www.mamicode.com/“java开发”>

  <constructor-arg index="1" type="double" value="http://www.mamicode.com/100"></constructor-arg>

</bean>

备注:index="0"表示,第一个参数,index="1",表示第二个参数

2、setter方法注入

public class Book{

  private string name;

  private double price;

  public void setName(String name){

    this.name=name;

  }

  public void setPrice(double price){

    this.price=price;

  }

}

applicationContext.xml

<bean id="book" class="book的完整路径类名">

  //一个property就是一个属性,如果是复杂属性用<property name=" " ref="引用目标bean的id">

  <property name="name" value="http://www.mamicode.com/web 开发"></property>

  <property name="price" value="http://www.mamicode.com/80"></property>

</bean>