ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Spring Boot的Bean注入:注解方式

2022-09-16 06:00:21  阅读:53  来源: 互联网

标签:ITest1Service Spring getNow Boot value public Bean Date test1Service


org.springframework.boot:spring-boot-starter-parent:2.6.4

Java 8

--

 

前言

在Spring项目中,一般使用 @Autowired 注入,不过,这种方式已经不是官方推荐的使用方式。

本文介绍几种使用 注解注入Bean的方式。

发布于博客园

建立一个Spring Boot的Web项目,引入lombok。

建立服务类:

public interface ITest1Service {
	Date getNow();	
}

@Service
public class Test1Service implements ITest1Service {
	@Override
	public Date getNow() {
		return new Date();
	}
}

接下来,使用不同方式在 Controller中注入 上面的 Service Bean。发布于博客园

 

在 属性上使用 @Autowired 注解

import org.springframework.beans.factory.annotation.Autowired;

属性

@RestController
@RequestMapping(value = {"/api/test/1"})
@Slf4j
public class Test1Controller {

	@Autowired
	private ITest1Service test1Service;

	@GetMapping(value = {"/getNow"})
	public Date getNow() {
		log.info("Test1Controller test1Service={}", test1Service);
		return test1Service.getNow();
	}
	
}

发布于博客园

使用 @Resource 注解

import javax.annotation.Resource;

@RestController
@RequestMapping(value = {"/api/test/2"})
@Slf4j
public class Test2Controller {

	@Resource(name = "test1Service")
	private ITest1Service test1Service;

	@GetMapping(value = {"/getNow"})
	public Date getNow() {
		log.info("Test2Controller test1Service={}", test1Service);
		return test1Service.getNow();
	}
	
}

发布于博客园

在 setter方法上使用 @Autowired 注解

setter方法

@RestController
@RequestMapping(value = {"/api/test/3"})
@Slf4j
public class Test3Controller {

	private ITest1Service test1Service;
	
	@Autowired
	public void setTest1Service(ITest1Service test1Service) {
		this.test1Service = test1Service;
	}

	@GetMapping(value = {"/getNow"})
	public Date getNow() {
		log.info("Test3Controller test1Service={}", test1Service);
		return test1Service.getNow();
	}
	
}

 

使用 @RequiredArgsConstructor 注解

import lombok.RequiredArgsConstructor;

+

final

@RestController
@RequestMapping(value = {"/api/test/4"})
@RequiredArgsConstructor
@Slf4j
public class Test4Controller {

	// final
	private final ITest1Service test1Service;

	@GetMapping(value = {"/getNow"})
	public Date getNow() {
		log.info("Test4Controller test1Service={}", test1Service);
		return test1Service.getNow();
	}
	
}

 

测试结果

调用各个 接口 /api/test/*/getNow,各个Controller都注入成功,注入的 test1Service 是同一个Bean。发布于博客园

: Test1Controller test1Service=com.bzhy.ben.service.Test1Service@7d1ed2bd
: Test2Controller test1Service=com.bzhy.ben.service.Test1Service@7d1ed2bd
: Test3Controller test1Service=com.bzhy.ben.service.Test1Service@7d1ed2bd
: Test4Controller test1Service=com.bzhy.ben.service.Test1Service@7d1ed2bd

 

还有什么其它的方式吗?

发布于博客园

参考资料

1、spring代替 @Autowired(lombok相关注解)

https://www.jianshu.com/p/087f805c1542

2、Spring Boot 生产中 16 条优秀实践

https://www.51cto.com/article/717811.html

3、

 

标签:ITest1Service,Spring,getNow,Boot,value,public,Bean,Date,test1Service
来源: https://www.cnblogs.com/luo630/p/16697532.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有