如何在SpringBoot中@Autowire服务

Gre*_*reg 6 java spring autowired spring-boot

大家好 我在使用Springboot时有一个关于将服务自动装配到类中的问题。我在Internet以及Springboot规范中看到的所有示例都具有类似的功能(摘自Springboot 1.5.7版规范):

package com.example.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class DatabaseAccountService implements AccountService {
private final RiskAssessor riskAssessor;

@Autowired
public DatabaseAccountService(RiskAssessor riskAssessor) {
this.riskAssessor = riskAssessor;
}
// ...
}
Run Code Online (Sandbox Code Playgroud)

这是一个通过@Autowiring构造函数通过其构造函数注入属性的类。另一种形式是@Autowire这样的属性:

@Autowired
private final RiskAssessor riskAssessor
Run Code Online (Sandbox Code Playgroud)

但是,在我工作的地方,要使这两种方法都起作用,我被告知我需要使用此方法:

 applicationContext.getAutowireCapableBeanFactory().autowireBean(Object.class)
Run Code Online (Sandbox Code Playgroud)

他们告诉我,为了使@Autowired批注起作用,我需要这样做。

现在我对您的问题是:为什么没有简单的注释可以使@Autowire正常运行?(类似于@AutowiredClass)。上面的方法太冗长且难以记住,因此肯定有一种更好的方法可以使@Autowired在类上工作以注入服务,就像我们在Grails中所做的那样(我们刚才说过def someService,它会自动注入)。

小智 5

如果您想@Autowired在您的 spring-boot 应用程序中正确使用,您必须执行以下步骤:

  1. 添加@SpringBootApplication到您的主类
  2. 添加@Service@Component注释到要注入的类
  3. 使用您所描述的两种方式之一进行自动装配


Zil*_*nas 0

RestService您需要对的实现进行注释,以便@ServiceSpring能够拾取它。@Component

@Service
public class MyRiskAssessorImpl implements RiskAssessor {
///
}
Run Code Online (Sandbox Code Playgroud)