<返回更多

Spring容器6种注入方式

2020-07-18    
加入收藏

本节学习Spring的DI/IOC容器的6种注入方式。

准备工作,编写基础类:

Role.JAVA

package raky.train.entity;

public class Role {
    private Integer id;
    private  String name;
    public Role() {
    }
    public Role(Integer id, String name) {
        this.id = id;
        this.name = name;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "Role{" +
                "id=" + id +
                ", name='" + name + ''' +
                '}';
    }
}

User.java

package raky.train.entity;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private Integer id;
    private String name;
    private String pass;
    private Integer age;

    private Role role;
}

1.setter注入

setter注入也叫设值注入,一般需要满足的条件:无参构造器,私有属性,setter方法。

配置文件代码:

    <!--type1: setter注入-->
    <bean id="role1" class="raky.train.entity.Role">
        <property name="id" value="1000" />
        <property name="name" value="dev" />
    </bean

    <bean id="user1" class="raky.train.entity.User">
        <property name="id" value="1000" /><!--注入:赋值-->
        <property name="name" value="raky" />
        <property name="pass" value="1234" />
        <property name="age" value="18" />
        <property name="role" ref="role1" /><!--注入:引用-->
    </bean>

2.构造器注入

构造器注入,也叫构造方法注入,一般需要提供构造器(类型,个数,顺序),私有属性,推荐添加默认无参构造器。

配置文件代码:

    <!--type2: 构造器注入-->
    <!--
        constructor-arg 构造方法参数标签
            |==> name 参数名称
            |==> type 参数类型
            |==> index 参数索引,从0开始
            |==> value 参数赋值(常量)
            |==> ref   参数引用(引用其他bean)
        一般情况下,name属性和index属性二选一即可
    -->
    <bean id="role2" class="raky.train.entity.Role">
        <constructor-arg name="id" type="java.lang.Integer" index="0" value="2000" />
        <constructor-arg name="name" type="java.lang.String" index="1" value="lucy" />
    </bean>
    <bean id="user2" class="raky.train.entity.User" >
        <constructor-arg name="id" value="2000" />
        <constructor-arg name="name" value="jack" />
        <constructor-arg name="pass" value="5678" />
        <constructor-arg name="age" value="28" />
        <constructor-arg name="role" ref="role2" />
    </bean>

3.工厂类静态方法注入

RoleFactory.java

package raky.train.factory;

import raky.train.entity.Role;

/**
 * 角色工厂类
 */
public class RoleFactory {
    //实例方法
    public Role createRoleInstance2(){
        return new Role(4000,"coco");
    }
}

配置文件代码:

    <!--type3:工厂类静态方法==>类方法-->
    <bean id="role3" class="raky.train.factory.RoleFactory" factory-method="creatRoleInstance1" />

4.工厂类实例方法注入

RoleFactory.java

package raky.train.factory;

import raky.train.entity.Role;

/**
 * 角色工厂类
 */
public class RoleFactory {
    //实例方法
    public Role createRoleInstance2(){
        return new Role(4000,"coco");
    }
}

配置文件代码:

    <!--type4:工厂类实例方法==>对象方法-->
    <bean id="roleFactory" class="raky.train.factory.RoleFactory" />
    <bean id="role4" factory-bean="roleFactory" factory-method="createRoleInstance2" />

5.p命名空间注入

p命名空间中的p即property属性,本质上还是setter注入,必须要满足setter的基本条件,此注入方式主要是简化bean的配置。

配置规则如下:

//1.beans标签添加p命名空间
xmlns:p="http://www.springframework.org/schema/p"
//2.配置方式
赋值: p:属性="值"
引用: p:属性-ref="bean"

配置文件代码:

    <!--type5:p命名空间注入-->
    <bean id="user5" class="raky.train.entity.User" p:id="5000" 
          p:name="xxx" p:pass="xxx" p:age="33" p:role-ref="role5" />

    <bean id="role5" class="raky.train.entity.Role" p:id="5000" p:name="test5" />

6.c命名空间注入

c命名空间中的c即constructor构造器,本质上还是构造器注入,必须要满足构造注入的基本条件,此注入方式主要是简化bean的配置。

配置规则如下:

//1.beans标签添加c命名空间
xmlns:c="http://www.springframework.org/schema/c"
//2.配置方式
//2.1 属性赋值:  
c:属性="值"  引用: c:属性-ref="bean"
//2.2 索引赋值:
c:_索引="值"  引用: c:_索引-ref="bean"

配置文件代码:

    <!--type6: c命名空间注入-->
    <!--
    <bean id="user6" class="raky.train.entity.User" c:id="6000" c:name="yyy"
    c:pass="yyy" c:age="55" c:role-ref="role6" />
    <bean id="role6" class="raky.train.entity.Role" c:id="6000" c:name="test6" />
    -->
    <bean id="user6" class="raky.train.entity.User" c:_0="6000" c:_1="yyy"
          c:_2="yyy" c:_3="55" c:_4-ref="role6" />

    <bean id="role6" class="raky.train.entity.Role" c:_0="6000" c:_1="test6" />

测试结果如下:

Spring容器6种注入方式

 

至此,Spring的DI/IOC容器的6种注入方式的学习笔记整理完毕。希望对大家有帮助。越分享越快乐。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>