文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Spring成员对象注入的三种方式是什么

2023-06-29 07:59

关注

本篇内容主要讲解“Spring成员对象注入的三种方式是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring成员对象注入的三种方式是什么”吧!

当一个类运行需要调用一个成员对象,成员对象也是被容器类托管的类对象时,则可以用依赖注入创建成员对象。让容器类来帮你创建成员对象。

前置:

容器类AppConfig

import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;@Configuration@ComponentScanpublic class AppConfig {}

创建一个接口Hello

public interface Hello {        void HelloWorld();    }

创建一个类HelloImpl1实现接口Hello。并且被容器托管

import org.springframework.stereotype.Component;@Componentpublic class HelloImpl1 implements Hello{    @Override    public void HelloWorld() {        System.out.println("HelloWorld1");    }}

一、@Autowired注解

在声明成员变量上加上@Autowires注解。让容器来帮忙创建对象。该成员变量也必须被容器类托管。

创建MyHello类,里面有Hello成员对象。如下所示:

import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;@Componentpublic class MyHello {    @Autowired    Hello h;    void say(){        h.HelloWorld();    }}

如果不加@Autowired运行say()会报错。

进行测试:

import org.springframework.context.ApplicationContext;import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class Test {    public static void main(String[] args) {        ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);        MyHello mh = ac.getBean("myHello",MyHello.class);        mh.say();    }}

运行结果:

Spring成员对象注入的三种方式是什么

如果成员对象是接口,并且有多个实现类。则需要使用@Qualifier或者@Primary注解。

在创建一个类实现Hello接口。

import org.springframework.stereotype.Component;@Componentpublic class HelloImol2 implements Hello{    @Override    public void HelloWorld() {        System.out.println("HelloWorld2");    }}

这时,Hello接口有两个实现类。

再次运行Test类,报错。因为调用类有冲突。

Spring成员对象注入的三种方式是什么

解决方案有两种。

@Qualifier

@Autowired下加入@Qualifier(value="id名") 。id名默认是类名且首字母小写。要指定是调用实现接口中的哪个类。

如上述解决:

import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.stereotype.Component;@Componentpublic class MyHello {    @Autowired    @Qualifier(value="helloImpl1") //添加此注解    Hello h;    void say(){        h.HelloWorld();    }}

Spring成员对象注入的三种方式是什么

@Primary

在想要用到的多个实现接口对象中的其中一个类,加上@Primary注解

如: 我想通过Hello运行HelloImpl1。则在HelloImpl加上@Primary注解:

import org.springframework.context.annotation.Primary;import org.springframework.stereotype.Component;@Component@Primarypublic class HelloImpl1 implements Hello{    @Override    public void HelloWorld() {        System.out.println("HelloWorld1");    }}

Test类运行成功

Spring成员对象注入的三种方式是什么

二、@Resource注解

在成员对象上加入@Resource(name="id名") id名为你想要调用这个接口中实现的哪个类的类名且首字母小写。

则上述的MyHello类可写成:

import org.springframework.stereotype.Component;import javax.annotation.Resource;@Componentpublic class MyHello {    @Resource(name="helloImpl1")    Hello h;    void say(){        h.HelloWorld();    }}

运行Test类

Spring成员对象注入的三种方式是什么

三、@Inject 和 @Named注解

使用这两个注解需要导入坐标。在pom.xml加入

<dependency>            <groupId>javax.inject</groupId>            <artifactId>javax.inject</artifactId>            <version>1</version></dependency>

两个注解一起用在需要创建成员对象上。其中@Named("id名")id名为你想要调用这个接口中实现的哪个类的类名且首字母小写。

则上述的MyHello类可以修改为:

import org.springframework.stereotype.Component;import javax.inject.Inject;import javax.inject.Named;@Componentpublic class MyHello {    @Inject    @Named("helloImpl1")    Hello h;    void say(){        h.HelloWorld();    }}

继续运行Test类,仍然可以运行成功

Spring成员对象注入的三种方式是什么

上述也可以实现set方法的依赖注入,需要保证传入的参数被容器托管。

到此,相信大家对“Spring成员对象注入的三种方式是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯