动力节点旗下在线教育品牌  |  咨询热线:400-8080-105 学Java全栈,上蛙课网
首页 > 文章

Spring MVC依赖注入三种方式

08-31 17:53 102浏览
举报 T字号
  • 大字
  • 中字
  • 小字

Spring MVC框架Spring一样为我们提供了三种依赖注入方式,分别是set注入,构造方法注入,接口注入。下面就向大家详细介绍Spring MVC依赖注入三种方式

1.set注入采用属性的set方法进行初始化,就成为set注入。

1)给普通字符类型赋值。public class User{

   privateString username;

 

   publicString getUsername() {

       returnusername;

   }

   publicvoid setUsername(String username) {

      this.username= username;

   }

}

我们只需要提供属性的set方法,然后去属性文件中去配置好让框架能够找到applicationContext.xml文件的beans标签。标签beans中添加bean标签, 指定id,class值,id值不做要求,class值为对象所在的完整路径。bean标签再添加property 标签,要求,name值与User类中对应的属性名称一致。value值就是我们要给User类中的username属性赋的值。

<bean id="userAction"class="com.lsz.spring.action.User" >

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

</bean>

2)给对象赋值同样提供对象的set方法public class User{

     private UserService userservice;

     public UserServicegetUserservice() {

          returnuser;

     }

     public void setUserservice(UserService userservice){

         this.userservice= userservice;

     }

}配置文件中要增加UserService的bean标签声明及User对象对UserService引用。

<!--对象的声明-->

<bean id="userService" class="com.lsz.spring.service.UserService"></bean>

 

<bean id="userAction"class="com.lsz.spring.action.User" >

   <property name="userservice" ref="userService"></property>

</bean>

这样配置,框架就会将UserService对象注入到User类中。

3)给list集合赋值同样提供set方法public class User{

    privateList username;

    publicList getUsername() {

        returnusername;

    }

    publicvoid setUsername(List username) {

        this.username= username;

    }

}

<bean id="userAction"class="com.lsz.spring.action.User" >

     <propertyname="username">

           <list>

               <value>zhang,san</value>

               <value>lisi</value>

               <value>wangwu</value>                                

               </list>

    </property>

</bean>

4)给属性文件中的字段赋值public class User{

    privateProperties props ;

    publicProperties getProps() {

        returnprops;

    }

    publicvoid setProps(Properties props) {

        this.props= props;

    }

}

<bean>

    <propertyname="props">

        <props>

           <propkey="url">jdbc:oracle:thin:@localhost:orl</prop>

           <propkey="driverName">oracle.jdbc.driver.OracleDriver</prop>

           <propkey="username">scott</prop>

           <propkey="password">tiger</prop>

        </props>

    </property>

</bean>

<prop>

标签中的key值是.properties属性文件中的名称注意:无论给什么赋值,配置文件中标签的name属性值一定是和对象中名称一致。

2.构造方法注入

1)构造方法一个参数public class User{

    privateString usercode;

    publicUser(String usercode) {

        this.usercode=usercode;

    }

}

<bean id="userAction"class="com.lsz.spring.action.User">                        

    <constructor-argvalue="admin"></constructor-arg>                        

</bean>

2)构造函数有两个参数时当参数为非字符串类型时,在配置文件中需要制定类型,如果不指定类型一律按照字符串类型赋值。当参数类型不一致时,框架是按照字符串的类型进行查找的,因此需要在配置文件中制定是参数的位置  

<constructor-argvalue="admin"index="0"></constructor-arg>                

<constructor-argvalue="23" type="int"index="1"></constructor-arg>

这样制定,就是构造函数中,第一个参数为string类型,第二个参数为int类型

3.通过接口注入

public class ClassA {

  private InterfaceB clzB;

  public void doSomething() {

    Ojbect obj = Class.forName(Config.BImplementation).newInstance();

    clzB = (InterfaceB)obj;

    clzB.doIt();

  }

……

}

上面的代码中,ClassA依赖于InterfaceB的实现,如何获得InterfaceB实现类的实例?传统的方法是在代码中创建 InterfaceB实现类的实例,并将赋予clzB.这样一来,ClassA在编译期即依赖于InterfaceB的实现.为了将调用者与实现者在编译 期分离,于是有了上面的代码。

我们根据预先在配置文件中设定的实现类的类名(Config.BImplementation),动态加载实现类,并通过InterfaceB强制转型后为ClassA所用,这就是接口注入的一个最原始的雏形。

 

public class ClassA {

  private InterfaceB clzB;

  public Object doSomething(InterfaceB b) {

    clzB = b;

    return clzB.doIt();

  }

……

}

上面代码中,加载接口实现并创建其实例的工作由容器完成。在运行期,InterfaceB实例将由容器提供。即使在IOC的概念尚未确立时,这样的方法也已经频繁出现在我们的代码中。

public class MyServlet extends HttpServlet {

  public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {

    ……

  }

}

 

HttpServletRequest和HttpServletResponse实例由Servlet Container在运行期动态注入。

上述的三种方式就是Spring MVC依赖注入方式,Spring MVC依赖注入方式和IoC反转控制本质上其实是一回事。三者相辅相成,互补互利,共同完成了Spring MVC依赖注入。想了解Spring MVC依赖注入方式的详细过程和原理可以观看本站的Spring MVC视频教程,里面有很详细的讲解,一点就透!

0人推荐
共同学习,写下你的评论
0条评论
天鹏桑
程序员天鹏桑

12篇文章贡献57547字

作者相关文章更多>

推荐相关文章更多>

DOM渲染的详细过程

QCode09-04 14:38

CSS水平和垂直居中技巧大梳理

Code大师09-04 14:50

mui的input框在IOS系统下无法聚焦或点击多次才能聚焦

不写代码你养我啊08-23 11:14

推荐的-视.频播放器以及在线客服

不写代码你养我啊09-17 18:02

谈谈java多线程的三大特性

要学习了06-18 18:13

发评论

举报

0/150

取消