二、依赖注入

Spring框架的各个部分都充分使用了依赖注入技术,它使代码不再有单实例垃圾,也不再有麻烦的属性文件,取而代之的是一致和优雅的程序代码。它也是Spring中非常重要的核心技术之一。

一、什么是控制反转与依赖注入

  IoC的英文全称是Iversion of Control,既控制反转。它使程序组件或类之间尽量形成一种松耦合的结构。开发者在使用类的实例之前,需要先创建对象的实例。但IoC将创建实例的任务交给IoC容器。

 

依赖注入有3种实现类型,Spring支持后两种

**接口注入

接口注入基于接口将调用与实现分离。这种依赖注入方式必须实现容器所规定的接口,使用程序代码和容器API绑定在一起,这不是理想的依赖注入方式。

**setter注入

setter注入基于JavaBean的setter方法为属性赋值。在实际开发中得到了最广泛的应用

public class User{

  private String name;

 

  public String getName(){

   return name;

 }

 

  public void setName(String name){

   this.name = name;

  }

}

 

 

**构造器注入

public class User(){

  private String name;

 

  public User(String name){

   this.name = name;

  }

}

 

二、Bean的配置

想要在Spring IoC容器中获取一个bean,首先要在配置文件中的<beans>元素中配置一个了元素<bean>,Spring的控制反转机制会跟据<bean>元素的具体配置来实例化这个bean实例

<bean id="test" class="com.mrTest">

其中,id属性为bean的名称,class属性为对应的类名,这样,通过BeanFactory容器的getBean("test")方法就可以获取到该类的实例。

 

三、Setter注入

public class User{

  private String name;

  private Integer age;

  private String sex;

  //省略set、get方法

}

在Spring的配置文件applicationContext.xml中配置该JavaBean

<bean name="user" class="com.mr.User>

  <property name="name">

    <value>小说</value>

  </property>

  <property name="age">

    <value>25</value>

  </property>

  <property name="sex">

    <value>男</value>

  </property>

</bean>

 

Resource resource = new ClassPthResource("applicationContext.xml");

BeanFactory factory = new XmlBeanFactory(resource);

User user = (User)factory.getBean("user");

System.out.pritnln("用户姓名-----"+user.getName());

System.out.println("用户年龄----"+user.getAge());

System.out.println("用户性别-----"+user.getSex());

 

四、构造器注入

public class User{

  private String name;

  private Integer age;

  private String sex;

  public User(String name,Integer age,String sex){

   this.name = name;

   this.age = age;

   this.sex = sex;

  }

 

  public void printInfo(){

   System.out.println("用户姓名-----"+name);

   System.out.println("用户年龄-----"+age);

   System.out.println("用户性别-----"+sex);

  }

}

在Spring的配置文件applicationContext.xml中配置该JavaBean

<bean name="user" class="com.mr.User>

  <property name="name">

    <value>小说</value>

  </property>

  <property name="age">

    <value>25</value>

  </property>

  <property name="sex">

    <value>男</value>

  </property>

</bean>

 

 

Resource resource = new ClassPthResource("applicationContext.xml");

BeanFactory factory = new XmlBeanFactory(resource);

User user = (User)factory.getBean("user");

user.printInfo();

 

由于大量的构造器参数可能使程序变得效率低下,特别是当某些属性是可选的时候,,但是构造器注入方式也有自己特点,它一次性将所胡依赖注入,也就是说,在程序未完全初始化的状态下,注入对象不会被调用,此外对象也不可能再次重新注入。对于注入类型的选择并没有硬性的规定,对于那些没有源代码的第三方类,或者没有提供Setter方法的遗留代码,只能选择构造哭注入方式实现依赖注入。

 

 

五、引用其他的Bean

在Spring中,可以通过配置文件使用<ref>元素引用其它JavaBean的实例对象

public class Manger extends AbstractController{

  private User user;

  public User getUser(){

    return user;

  }

 

  public void setUser(User user){

   this.user = user;

  }

  protected ModelAndView handRequestIntermal(HttpServletRequets arg0,HttpServletResonse arg1)throw Excpetion{

   user.printInfo();

   return null;

  }

}

 

(1)控制器AbstractController:AbstractController是Spring中最基本的控制大器,所有Spring控制器都继承了AbstractController控制器,它提供了诸如缓存支持和mimetype设置这样的功能.

(2)handleRequestInternal()抽象方法:当从AbstractController继承时,需要实现handleRequestInternal()抽象方法,该方法将用来实现自己的逻辑,并返回一个ModelAndView对象

applicationContext.xml

<bean name="/main.do" class="com.mr.Manger">

  <propery name="user">

     <ref local="user"/>
   </propery>

</bean>

 

<!-- 设置自动加载配置文件 -->

<servlet>

  <servlet-name>dispatcherServlet></servlet-name>

  <init-param>

    <param-name>contextConfigLocation></param-name>

    <param-name>/WEB-INF/applicationContext.xml</param-value>

  </init-param>

  <load-on-startup>1</load-on-startup>

</servlet>

<servlet>

  <servlet-name>dispatcherServelt></servlet-name>

  <url-pattern>*.do</url-pattern>

</servlet>

 

 

六、匿名内部JavaBean的创建

<!-- 定义学生匿名内部类 -->

<bean id="school" class="School">

   <property name="student">

      <bean class="Student"/>

   <property>

</bean>

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值