zoukankan      html  css  js  c++  java
  • spring 依赖注入的3种方式

      在实际环境中实现IoC容器的方式主要分为两大类,一类是依赖查找,依赖查找是通过资源定位,把对应的资源查找回来;另一类则是依赖注入,而Spring主要使用的是依赖注入。一般而言,依赖注入可以分为3种方式。
      •构造器注入。
      •setter注入。
      •接口注入。
      构造器注入和setter注入是主要的方式,而接口注入是从别的地方注入的方式,比如在Web工程中,配置的数据源往往是通过服务器(比如Tomcat)去配置的,这个时候可以用JNDI的形式通过接口将它注入Spring IoC容器中来。下面对它们进行详细讲解。

    构造器注入

      构造器注入依赖于构造方法实现,而构造方法可以是有参数的或者是无参数的。在大部分的情况下,我们都是通过类的构造方法来创建类对象,Spring也可以采用反射的方式,通过使用构造方法来完成注入,这就是构造器注入的原理。

    public class Role {
        private Long id;
        private String roleName;
        private String note;
    
    
        public Role(String roleName, String note) {
            this.roleName = roleName;
            this.note = note;
        }
    
        /******** setter and getter *******/
    }

      这个时候是没有办法利用无参数的构造方法去创建对象的,为了使Spring能够正确创建这个对象,可以像代码清单那样去做。

    <bean id="role1" class="com.ssm.chapter9.pojo.Role">
        <constructor-arg index="0" value="总经理"/>
        <constructor-arg index="1" value="公司管理者"/>
    </bean>

      constructorarg元素用于定义类构造方法的参数,其中index用于定义参数的位置,而value则是设置值,通过这样的定义Spring便知道使用Role(String,String)这样的构造方法去创建对象了。这样注入还是比较简单的,但是缺点也很明显,由于这里的参数比较少,所以可读性还是不错的,但是如果参数很多,那么这种构造方法就比较复杂了,这个时候应该考虑setter注入。

    使用setter注入

      setter注入是Spring中最主流的注入方式,它利用JavaBean规范所定义的setter方法来完成注入,灵活且可读性高。它消除了使用构造器注入时出现多个参数的可能性,首先可以把构造方法声明为无参数的,然后使用setter注入为其设置对应的值,其实也是通过Java反射技术得以现实的。这里假设先在代码清单中为Role类加入一个没有参数的构造方法,然后做代码清单的配置。

    <bean id="role2" class="com.ssm.chapter9.pojo.Role">
        <property name="roleName" value="高级工程师"/>
        <property name="note" value="重要人员"/>
    </bean

      这样Spring就会通过反射调用没有参数的构造方法生成对象,同时通过反射对应的setter注入配置的值了。这种方式是Spring最为主要的方式,在实际工作中使用广泛。

    接口注入

      有些时候资源并非来自于自身系统,而是来自于外界,比如数据库连接资源完全可以在Tomcat下配置,然后通过JNDI的形式去获取它,这样数据库连接资源是属于开发工程外的资源,这个时候我们可以采用接口注入的形式来获取它

  • 相关阅读:
    动态设置字体大小需要注意的点
    getDimension与getDimensionPixelOffset与getDimensionPixelSize的区别
    统计图钻取的明细报表在非模态窗口中显示
    局部区块多个报表 TAB 页切换及局部区块的参数查询
    分栏报表制作攻略
    多值关联过滤
    鼠标悬停出现提示信息怎么做
    复杂报表设计之动态报表
    Logo(图片)作为报表水印的解决方法
    分组填报表的制作
  • 原文地址:https://www.cnblogs.com/ooo0/p/10962360.html
Copyright © 2011-2022 走看看