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、