首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从控制器调用服务

如何从控制器调用服务
EN

Stack Overflow用户
提问于 2018-07-28 06:20:53
回答 2查看 1.9K关注 0票数 0

我正在尝试从控制器调用以下服务:

代码语言:javascript
复制
@Service
class MyMailService {

    private final SendGrid sendGrid;

    @Inject
    public SendGridMailService(SendGrid sendGrid) {
        this.sendGrid = sendGrid;
    }

    void sendMail() {
        Request request = new Request();
        Response response = this.sendGrid.api(request);                
    }
}

和我的控制器:

代码语言:javascript
复制
# controller
public String index(Model model) {
    MyMailService.sendMail() // how to do this properly?
    return "register";
}

从控制器调用它的正确方式是什么?基本上,我尝试“自动配置”sendgrid,这样就不必在每次调用MyMailService类时使用API键初始化SendGrid对象。

EN

回答 2

Stack Overflow用户

发布于 2018-07-28 06:57:58

正如其他人所建议的那样,我也认为你需要花更多的时间学习Java和Spring基础知识。但是为了回答你的问题,你可以在控制器中自动连接/注入你的service单例对象来使用它:

代码语言:javascript
复制
@Controller
public class ControllerA
{
  .
  .
  .
  @Autowired
  private MyMailService mymailService; //singleton object instance injected to be used/shared by all controllers

public String index(Model model) {
    mymailService.sendMail()
    return "register";
}
  .
  .
  .

}
票数 2
EN

Stack Overflow用户

发布于 2018-07-28 08:23:57

您可以通过以下方式调用您的服务

1)只需将@Autowired添加到您的类类型中

代码语言:javascript
复制
@Autowired
MyMailService myMailService;

2)如下使用构造函数注入:

代码语言:javascript
复制
MyMailService myMailService;    

@Autowired
public WebController(MyMailService myMailService) {
    this.myMailService = myMailService;
}


-  here i assumed my Controller name is WebController

3)如下使用Setter注入:

代码语言:javascript
复制
MyMailService myMailService;

@Autowired
public void setMyMailService(MyMailService myMailService) {
    this.myMailService = myMailService;
}

最后,在你的控制器中,你可以像下面这样调用你的服务类方法。

代码语言:javascript
复制
myMailService.sendMail();

注意:遵循命名约定。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51566249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档