Spring Setter依赖注入示例

学习如何编写Spring Setter依赖注入示例Setter注入Spring依赖注入的一种 。 Spring支持字段注入,Setter注入以及构造函数注入,以将依赖项注入Spring托管的bean中。 本教程的范围仅限于Setter注入。

有关Spring依赖注入的更多信息:

  • Spring构造函数依赖注入示例
  • Spring字段依赖注入示例
  • Spring依赖注入–字段vs设置器vs构造函数注入
  • Spring依赖注入和控制反转

考虑一下,我们有一个DogsService ,它是一个基于Spring的REST服务。

我们将编写一个DogsControllerDogsServiceDogsDao 。 这是一个不执行任何操作的虚拟服务。 这里的目的是了解Spring Dependency Injection如何与Setter方法一起使用。

不知道如何编写Spring Boot Rest Service?

阅读: Spring Boot Rest Service

想更多地了解Spring Framework?

读这个:

  • Spring框架介绍
  • Spring框架架构
  • Spring依赖注入和控制反转
  • Spring靴休息服务

DogsDao.java

没有字段,因此没有依赖性。 我们添加了带有打印消息的无参数构造函数。

package com.amitph.spring.dogs.dao;import com.amitph.spring.dogs.repo.Dog;
import org.springframework.stereotype.Component;import java.util.List;@Component
public class DogsDao {public DogsDao(){System.out.println("DogsDao no-arg constructor called");}public List<Dog> getAllDogs() {System.out.println("DogsDao.getAllDogs called");return null;}
}

DogsService.java

DogsService取决于DogsDao 。 在下面的类中, setter方法用@Autowired注释。 为了查看Setter注入的工作方式,我们在setter方法中添加了一条print语句。 除了使用setter方法外,我们还添加了无参数构造函数和带有相应打印消息的参数化构造函数

package com.amitph.spring.dogs.service;import com.amitph.spring.dogs.dao.DogsDao;
import com.amitph.spring.dogs.repo.Dog;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import java.util.List;@Component
public class DogsService {private DogsDao dao;public List<Dog> getDogs() {System.out.println("DogsService.getDogs called");return dao.getAllDogs();}@Autowiredpublic void setDao(DogsDao dao) {System.out.println("DogsService setter called");this.dao = dao;}public DogsService(){System.out.println("DogsService no-arg constructor called");}public DogsService(DogsDao dao) {System.out.println("DogsService arg constructor called");this.dao = dao;}
}

DogsController.java

DogsController依赖于DogsService设置器带有@Autowired注释,并具有打印语句。 除了setter方法外,我们还添加了无参数参数化构造函数以及相应的打印消息。

package com.amitph.spring.dogs.web;import com.amitph.spring.dogs.repo.Dog;
import com.amitph.spring.dogs.service.DogsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
@RequestMapping("/dogs")
public class DogsController {private DogsService service;@GetMappingpublic List<Dog> getDogs() {return service.getDogs();}@Autowiredpublic void setService(DogsService service) {System.out.println("DogsController setter called");this.service = service;}
}

应用启动

.   ____          _            __ _ _/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/  ___)| |_)| | | | | || (_| |  ) ) ) )'  |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot ::        (v2.1.0.RELEASE)2019-02-04 19:06:17.058  INFO 68545 --- [           main] com.amitph.spring.dogs.Application       : Starting Application on Amitsofficemac.gateway with PID 68545 (/Users/aphaltankar/Workspace/personal/dog-service-jpa/out/production/classes started by aphaltankar in /Users/aphaltankar/Workspace/personal/dog-service-jpa)
2019-02-04 19:06:17.061  INFO 68545 --- [           main] com.amitph.spring.dogs.Application       : No active profile set, falling back to default profiles: default
2019-02-04 19:06:17.670  INFO 68545 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data repositories in DEFAULT mode.
2019-02-04 19:06:17.724  INFO 68545 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 48ms. Found 1 repository interfaces.
2019-02-04 19:06:17.992  INFO 68545 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$4a5366ed] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2019-02-04 19:06:18.225  INFO 68545 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2019-02-04 19:06:18.237  INFO 68545 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2019-02-04 19:06:18.237  INFO 68545 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/9.0.12
2019-02-04 19:06:18.242  INFO 68545 --- [           main] o.a.catalina.core.AprLifecycleListener   : The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/Users/aphaltankar/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.]
2019-02-04 19:06:18.315  INFO 68545 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2019-02-04 19:06:18.315  INFO 68545 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1205 ms
2019-02-04 19:06:18.339  INFO 68545 --- [           main] o.s.b.w.servlet.ServletRegistrationBean  : Servlet dispatcherServlet mapped to [/]
2019-02-04 19:06:18.342  INFO 68545 --- [           main] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'characterEncodingFilter' to: [/*]
2019-02-04 19:06:18.342  INFO 68545 --- [           main] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2019-02-04 19:06:18.342  INFO 68545 --- [           main] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'formContentFilter' to: [/*]
2019-02-04 19:06:18.342  INFO 68545 --- [           main] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'requestContextFilter' to: [/*]
2019-02-04 19:06:18.434  INFO 68545 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2019-02-04 19:06:18.524  INFO 68545 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2019-02-04 19:06:18.645  INFO 68545 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default...]
2019-02-04 19:06:18.690  INFO 68545 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate Core {5.3.7.Final}
2019-02-04 19:06:18.691  INFO 68545 --- [           main] org.hibernate.cfg.Environment            : HHH000206: hibernate.properties not found
2019-02-04 19:06:18.779  INFO 68545 --- [           main] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.0.4.Final}
2019-02-04 19:06:18.868  INFO 68545 --- [           main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.MySQL5InnoDBDialect
2019-02-04 19:06:19.279  INFO 68545 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
DogsDao no-arg constructor called
DogsService no-arg constructor called
DogsService setter called
DogsController no-arg constructor called
DogsController setter called
2019-02-04 19:06:19.650  INFO 68545 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2019-02-04 19:06:19.681  WARN 68545 --- [           main] aWebConfiguration$JpaWebMvcConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
2019-02-04 19:06:19.856  INFO 68545 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2019-02-04 19:06:19.859  INFO 68545 --- [           main] com.amitph.spring.dogs.Application       : Started Application in 3.138 seconds (JVM running for 3.647)

春天发生的事情是Spring首先尝试实例化DogsController并发现了对DogsService的依赖。 因此,它实例化了DogsService ,而后者又依赖于DogsDao 。 因此, DogsDao是第一个实例化的,然后是DogsService ,最后是DogsController

让我们详细看看发生了什么。

  • 第36行:调用DogsDao无参数构造函数。
  • 第37行:调用DogsService无参数构造函数。 注意:参数化的构造函数永远不会被调用
  • 第38行:调用DogsService Setter。 注入DogsDao实例(在第36行创建)的位置。
  • 第39行:调用DogsController无参数构造函数。
  • 第40行:调用DogsController Setter方法。 DogsService实例(在第37行中创建)。

摘要

您学习了如何在Spring应用程序中编写Setter注入 。 如果使用Setter注入 ,则使用@Autowired注释setter方法。 Spring将首先使用无参数构造函数实例化Bean,然后调用setter方法来注入依赖项。

在接下来的教程中,我们将了解基于构造函数的注入是如何工作的。

翻译自: https://www.javacodegeeks.com/2019/02/spring-setter-dependency-injection-example.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/343822.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【渝粤教育】电大中专幼儿园课程论 (8)作业 题库

作业视频教务托管&#xff0c;壹叁路路贰陆陆壹〇肆〇 显性课程是 ( )的课程 A.指定的 B.随机的 C.有计划的 D.无计划的 错误 正确答案&#xff1a;左边查询 学生答案&#xff1a;未作答 2.幼儿园课程目标要素不包括( ) A.特征 B.目标 C.评价 D.内容 错误 正确答案&#xff1a;…

http和php怎么交互,实现http与workerman的交互demo

这里主要用到wm的聊天室demo做了一个示例。/*** This file is part of workerman.** Licensed under The MIT License* For full copyright and license information, please see the MIT-LICENSE.txt* Redistributions of files must retain the above copyright notice.** au…

16路开关量光端机产品功能及接线图

飞畅科技生产的16路开关量光端机&#xff0c;可以使开关量信号通过光缆在光纤上传输双向控制。全数字光传输通道&#xff0c;确保高质量的信号传输。面板上有电源指示灯、光信号指示灯数据信号指示灯&#xff0c;可以直观的检测电源、光信号、数据信号状态。单向系列开关量光端…

【渝粤教育】电大中专新媒体营销实务 (2)_1作业 题库

1.新媒体在进行内容传播时&#xff0c;可以做到将文字、图片、视频等同时传播&#xff0c;呈现出&#xff08;&#xff09;的特点。 A.移动化 B.多元化 C.便捷性 错误 正确答案&#xff1a;左边查询 学生答案&#xff1a;A 2.第四媒体发展到宽带互联网阶段成为&#xff08;&…

matlab查找替换指令,使用matlab GUI在.txt文件中编辑特定数字使用搜索/替换

使用matlab GUI在.txt文件中编辑特定数字使用搜索/替换 我有一堆不同的模板.txt文件&#xff0c;我想由Matlab中的用户访问。这些模板看起来像这样&#xff0c;但是有一些主要的区别&#xff0c;我将解释&#xff1a;LOAD BOX 1 SUBJ M1_299633_D295158_JUN191910_Aut_ERROR2 E…

【渝粤教育】电大中专电商运营实操 (18)作业 题库

1.电子商务具有全球性特点&#xff0c;不受空间的限制&#xff0c;但受时间的限制。 &#xff08; &#xff09; A.正确 B.错误 错误 正确答案&#xff1a;左边查询 学生答案&#xff1a;未作答 2.电子商务最重要的是“商务”&#xff0c;而网站只不过是电子商务的后台支撑。 &…

【渝粤教育】电大中专电子商务网站建设与维护 (2)作业 题库

VBScript的运算符号包括&#xff08;&#xff09; A.算数运算符 B.逻辑运算符 C.字符串&#xff08;连接&#xff09;运算符 D.比较运算符 E.以上都正确 正确答案&#xff1a;E 查看答案 2.Buffer从英文直译过来的意思是“缓冲区”&#xff0c;缓冲区是指服务器内存中的一块区域…

电话光端机安装步骤详解

光端机是光信号传输的终端设备&#xff0c;其主要作用是把传统的电话信号转换成光信号并在光纤上传输的设备&#xff0c;是随着光线技术的发展而出现的光端机产品。那么&#xff0c;电话光端机是怎么安装的呢&#xff1f;今天就由飞畅科技的小编来为大家介绍下电话光端机的详细…

更深入地了解Java 8 Date and Time API

在这篇文章中&#xff0c;我们将更深入地了解通过Java 8获得的新的Date / Time API&#xff08; JSR 310 &#xff09;。 请注意&#xff0c;本文主要由显示新API功能的代码示例驱动。 我认为这些示例是不言自明的&#xff0c;因此我并没有花太多时间在它们周围写文本:-) 让我…

matlab怎么提取特征,matlab – 了解提取特征的编码

我关注的编码是fisher编码,因为我已经证明我的工作效果最好.所以我想在我提取的(SIFT)功能上测试Fisher编码,并测试系统的性能,无论是否编码.而不是重新开始我发现vl_feat有一个用于fisher编码的内置库,他们有一个教程,以及链接here现在我已经完成了所需的大部分工作,但实际上编…

【渝粤教育】电大中专药剂学基础知识 (3)作业 题库

1.胶囊剂不检查的项目是&#xff08;&#xff09;。 A.装量差异 B.崩解时限 C.硬度 D.水分 E.外观 正确 正确答案&#xff1a;左边查询 学生答案&#xff1a;C 2.成裂片和顶裂的原因正确的是&#xff08;&#xff09;。 A.压力分布的不均匀 B.颗粒中细粉太多 C.颗粒过干 D.弹性…

【渝粤教育】电大中专计算机应用基础_1作业 题库

1.反映计算机存储容量的基本单位是() A.字节 B.字 C.二进制位 D.双字 正确 正确答案&#xff1a;左边查询 学生答案&#xff1a;A 2.巨型计算机指的是() A.重量大 B.功能强 C.体积大 D.耗电量大 错误 正确答案&#xff1a;左边查询 学生答案&#xff1a;A 3.在微型计算机中,下列…

关于光端机的一些常见术语解释

光端机&#xff0c;就是光信号传输的终端设备。今天飞畅科技的小编就来为大家详细介绍下光端机的类型&#xff0c;接口种类及厂家的术语&#xff0c;感兴趣的朋友就一起来详细了解下吧&#xff01; 一、光端机类型&#xff1a; 光端机&#xff0c;就是将多个E1&#xff08;一种…

php 站内搜索引擎,淘特站内搜索引擎For PhoCmsV9.4

一、产品特点&#xff1a;该产品是淘特站内搜索引擎For PhpCmsV9特别定制版&#xff0c;系统安装后&#xff0c;就可以索引、模糊查询PhpCmsV9的文章数据了(无需连接数据库哦)二、产品下载&#xff1a;三、使用说明&#xff1a;提示&#xff1a;本系统已和tomcat7打包&#xff…

【渝粤教育】电大中专跨境电子商务理论与实务 (31)作业 题库

1.在按照服务类型中&#xff0c;&#xff08;&#xff09;服务平台主要是为境内外会员商户提供网络营销平台&#xff0c;传递供应商或采购商等商家的商品或服务信息&#xff0c;促成双方完成交易。 A.信息服务平台 B.在线交易平台 C.线上服务平台 D.线下交易平台 正确 正确答案…

交换机组网常见九大故障问题

交换机是一种用于电信号转发的网络设备。它可以为接入交换机的任意两个网络节点提供独享的电信号通路。最常见的交换机是以太网交换机。其他常见的还有电话语音交换机、光纤交换机等。那么&#xff0c;交换机组网常见九大故障问题有哪些呢&#xff1f;接下来我们就跟随飞畅科技…

python qtdesigner安装,PyCharm+Qt Designer+PyUIC安装配置教程详解

Qt Designer用于像VC的MFC一样拖放、设计控件PyUIC用于将Qt Designer生成的.ui文件转换成.py文件Qt Designer和PyUIC都包含在PyQt5中&#xff0c;所以我们只需要安装PyQt5塻块然后再指定Qt Designer和PyUIC即可为了避免篇幅过长&#xff0c;本文只讲安装配置&#xff0c;使用可…

国家开放大学2021春1089现代教育思想答案

教育 教育 试卷代号&#xff1a;1089 2 0 2 1年春季学期期末统一考试 现代教育思想 试题答案及评分标准&#xff08;开卷&#xff09; &#xff08;供参考&#xff09; 2021年7月 一、填空题&#xff08;共4题&#xff0c;每空1分&#xff0c;共10分&#xff09; 1&#xff0…

[渝粤教育] 西南科技大学 建筑制图 在线考试复习资料

建筑制图——在线考试复习资料 一、单选题 1.截平面通过锥顶完全截割圆锥时,截交线为( ) A.椭圆 B.抛三角形 C.四边形 D.圆 2.下列说法正确的是( ) A.投影面垂直线满足中心投影规律 B.投影面垂直线可以在两个投影面反映集聚性 C.直线垂直于一个投影面,必然平行于其余两个投影面…

可网管交换机的三种管理方式介绍

交换机的按是否可网管&#xff0c;分为可网管交换机和不可网管交换机&#xff0c;可网管交换机可以通过以下几种途径进行管理&#xff1a;通过RS-232串行口&#xff08;或并行口&#xff09;管理、通过网络浏览器管理和通过网络管理软件管理。接下来就由杭州飞畅科技来为大家详…