您当前的位置:首页 > 电脑百科 > 程序开发 > 容器

Spring容器6种注入方式

时间:2020-07-18 14:42:40  来源:  作者:

本节学习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种注入方式的学习笔记整理完毕。希望对大家有帮助。越分享越快乐。



Tags:Spring容器   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
环境:Spring5.3.10通常,应用程序开发人员不需要对ApplicationContext实现类进行子类化。相反,SpringIOC容器可以通过插入特殊集成接口的实现来扩展。使用BeanPostProcessor自定...【详细内容】
2021-10-26  Tags: Spring容器  点击:(34)  评论:(0)  加入收藏
写在前面当bean是单实例,并且没有设置懒加载时,Spring容器启动时,就会实例化bean,并将bean注册到IOC容器中,以后每次从IOC容器中获取bean时,直接返回IOC容器中的bean,不再创建新的b...【详细内容】
2020-08-21  Tags: Spring容器  点击:(76)  评论:(0)  加入收藏
本节学习Spring的DI/IOC容器的6种注入方式。准备工作,编写基础类:Role.javapackage raky.train.entity;public class Role { private Integer id; private String name...【详细内容】
2020-07-18  Tags: Spring容器  点击:(123)  评论:(0)  加入收藏
▌简易百科推荐
一、前因闲来没事,想着升级下树莓派中的应用,没曾想,全是最新的,害我以为被黑客眷顾,帮我升级了。多方查证,才知道,是上次搭建的photoprism搞的鬼,不过也不全是它的锅,只是它的yml文...【详细内容】
2021-12-28  闲余悟道    Tags:Docker   点击:(2)  评论:(0)  加入收藏
一、为什么要搭建主从架构呢1.数据安全,可以进行数据的备份。2.读写分离,大部分的业务系统来说都是读数据多,写数据少,当访问压力过大时,可以把读请求给到从服务器。从而缓解数据...【详细内容】
2021-12-15  实战Java    Tags:Docker   点击:(12)  评论:(0)  加入收藏
在网页中渲染公式一直是泛学术工具绕不开的一个功能,最近更新产品功能,正巧遇到了这个需求,于是使用容器方式简单实现了一个相对靠谱的公式渲染服务。分享出来,希望能够帮到有类...【详细内容】
2021-12-01  编程菌zfn    Tags:Docker   点击:(11)  评论:(0)  加入收藏
1.1 docker命令直接部署1.1.1 拉取镜像docker pull wurstmeister/zookeeperdocker pull wurstmeister/kafka1.1.2 启动zookeeper容器docker run -d --name myzookeeper -p 2...【详细内容】
2021-11-15  无    Tags:docker   点击:(48)  评论:(0)  加入收藏
01 前言 顺着docker的发展,很多测试的同学也已经在测试工作上使用docker作为环境基础去进行一些自动化测试,这篇文章主要讲述我们在docker中使用浏览器进行自动化测试如果可以...【详细内容】
2021-10-29  小码哥聊软件测试    Tags:Docker   点击:(42)  评论:(0)  加入收藏
因为你懂得的原因,下载docker镜像速度非常喜感,故收集几个国内常用的docker镜像。Docker中国区官方镜像地址:https://registry.docker-cn.com网易163的镜像http://hub-mirror.c...【详细内容】
2021-10-28  抓蛙程序猿    Tags:docker   点击:(48)  评论:(0)  加入收藏
环境:Spring5.3.10通常,应用程序开发人员不需要对ApplicationContext实现类进行子类化。相反,SpringIOC容器可以通过插入特殊集成接口的实现来扩展。使用BeanPostProcessor自定...【详细内容】
2021-10-26  Java网络研发架构师    Tags:Spring   点击:(34)  评论:(0)  加入收藏
我们在很多场景下都需要做笔记,来对抗遗忘,一份好的笔记不仅能在需要的时候供我们查阅,也能帮助我们归纳整理知识提高做事效率。 目前市面上有很多云笔记软件,体验上各有不同,但...【详细内容】
2021-10-11  运维贼船    Tags:docker   点击:(62)  评论:(0)  加入收藏
1. Nacos官网Nacos Docker 快速开始2. Clone 项目git clone https://github.com/nacos-group/nacos-docker.git3. cd 到nacos-docker 路径下 直接启动即可cd nacos-dockerdo...【详细内容】
2021-09-16  程序狗爱化妆    Tags:Nacos   点击:(109)  评论:(0)  加入收藏
今天不做保姆级教程,分享奶爸常用、好用的Docker应用。有了这些Docker,Nas的可玩性会大幅提高,有时候奶爸也在想,刨去官方套件不考虑的话,Nas真的是差不多。如果小伙伴们有需要,后...【详细内容】
2021-09-03  晋升奶爸的垃圾佬    Tags:Docker   点击:(168)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条