• Spring Bean几种注入方式——setter(常用),构造器,注入内部Bean,注入集合,接口...


    依赖注入分为三种方式:

    1.1构造器注入

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

       代码清单:构造器注入

     1 package com.spring.chapter3;
     2 
     3 public class Role {
     4 
     5     private long id;
     6     private String roleName;
     7     
     8     public Role(long id,String roleName){
     9         this.id=id;
    10         this.roleName=roleName;
    11         
    12     }
    13     public void getCount(){
    14         System.out.println("Role已被调用"+"
    "+"id:"+id+"
    "+"roleName:"+roleName);
    15         
    16     }
    17 
    18 }

      代码清单:构造器配置

    1 <bean id="Role" class="com.spring.chapter3.Role">
    2         <constructor-arg index="0" value="007"></constructor-arg>
    3         <constructor-arg index="1" value="zhangqiang"></constructor-arg>
    4     </bean>
    
    
    

    元素名

    作用

    优缺点

    constructor-arg
    元素用于定义类构造方法的参数
    注入简单,不宜参数过多
    
    
    
    
     index
    用于定义对应类构造方法的参数位置
    value
    设置值

    1.2使用setter注入

      setter注入是Spring中最主流的注入方法(常用),好处就不用多说了。原理也是通过反射注入,直接上代码。(注意对应的实体类属性必须实现set,get方法。如果实体类没有属性也会被注入)。

     1 package com.spring.chapter3;
     2 
     3 public class Role {
     4 
     5     public long getId() {
     6         return id;
     7     }
     8     public void setId(long id) {
     9         this.id = id;
    10     }
    11     public String getRoleName() {
    12         return roleName;
    13     }
    14     public void setRoleName(String roleName) {
    15         this.roleName = roleName;
    16     }
    17     private long id;
    18     private String roleName;
    19     
    20 }

      Bean配置xml

    1 <bean id="Role" class="com.spring.chapter3.Role">
    2     </bean>

     2.1 注入内部Bean

    注入内部Bean跟setter注入是差不多的,不用多说直接看代码。

      代码清单:内部Bean注入

     1 package com.spring.chapter3;
     2 
     3 public class Role {
     4 
     5     public int getId() {
     6         return id;
     7     }
     8 
     9     public void setId(int id) {
    10         this.id = id;
    11     }
    12 
    13     public String getRoleName() {
    14         return RoleName;
    15     }
    16 
    17     public void setRoleName(String roleName) {
    18         RoleName = roleName;
    19     }
    20 
    21     public DomePojo getDomePojo() {
    22         return domePojo;
    23     }
    24 
    25     public void setDomePojo(DomePojo domePojo) {
    26         this.domePojo = domePojo;
    27     }
    28 
    29     private DomePojo domePojo;  //注意这里是类变量
    30     private  int id;
    31     private String RoleName;
    32     public void getCount(){
    33         System.out.println("我是Role类的方法");
    34     }
    35 }

    代码清单:内部 bean 为基于 setter 注入进行配置的配置文件 Spring.xml 文件:

    1  <bean id="DomePojo" class="com.spring.chapter3.DomePojo">
    2      
    3      </bean>
    4     <bean id="Role" class="com.spring.chapter3.Role">
    5         <property name="id" value="007"></property>
    6         <property name="RoleName" value="zhangqiang"></property>
    7         <property name="DomePojo" ref="DomePojo"></property>
    8     </bean>

     

    property name对应pojo中的属性(类变量),ref关联到对应Bean的id (注意:ref关联的Bean一定要在Spring Ioc容器中定义,否则会报错

    2.2 注入集合

    如果想传递多个值,如 Java Collection 类型 List、Set、Map 和 Properties,应该怎么做呢。为了处理这种情况,Spring 提供了四种类型的集合的配置元素,如下所示:

                      

    元素描述
    <list> 它有助于连线,如注入一列值,允许重复。
    <set> 它有助于连线一组值,但不能重复。
    <map> 它可以用来注入名称-值对的集合,其中名称和值可以是任何类型。
    <props> 它可以用来注入名称-值对的集合,其中名称和值都是字符串类型。

    代码清单:Pojo实体类(注意必须setter方法

     1 package com.spring.chapter4;
     2 
     3 import java.util.List;
     4 import java.util.Set;
     5 
     6 public class Collection {
     7     public Set getAddSet() {
     8         return addSet;
     9     }
    10 
    11     public void setAddSet(Set addSet) {
    12         this.addSet = addSet;
    13     }
    14 
    15     public List getAddList() {
    16         return addList;
    17     }
    18 
    19     public void setAddList(List addList) {
    20         this.addList = addList;
    21     }
    22 
    23     private Set addSet;
    24     private List addList;
    25 
    26     public void getCount(){
    27         System.out.println("我是Role类的方法");
    28     }
    29 }

    代码清单:Bean配置

     1     <bean id="Collection" class="com.spring.chapter4.Collection">
     2         <property name="addList">
     3             <list>
     4                 <value>1</value>
     5                 <value>2</value>
     6                 <value>3</value>
     7                 <value>4</value>
     8             </list>
     9         </property>
    10         <property name="addSet">
    11             <set>
    12                 <value>6</value>
    13                 <value>7</value>
    14                 <value>8</value>
    15                 <value>9</value>
    16             </set>
    17         </property>
    18     </bean>
    19     

    测试结果:

    本文代码下载地址:https://files.cnblogs.com/files/ysource/springSetter%E7%AD%89%E4%BE%9D%E8%B5%96%E6%B3%A8%E5%85%A5.rar

  • 相关阅读:
    VB.NET 操作Json 包括嵌套的
    c#和VB混用出现的错误
    System.ArgumentException: 另一个SqlParameterCollection中已包含SqlParameter。
    centos vsftpd 安装配置
    linux centos apache+php+mysql 安装( 用包安装 非yum 安装)
    迟到的一笔 php 5 apache 2.2 webservice 创建与配置
    linux centos apache+php+mysql 安装
    php 不能连接数据库 php error Can't connect to local MySQL server through socket '/tmp/mysql.sock'
    内置过渡动画
    Input 输入框
  • 原文地址:https://www.cnblogs.com/ysource/p/12349931.html
Copyright © 2020-2023  润新知