一、在Controller中调用
1、定义Service接口:
首先,你需要定义一个Service接口,其中包含你需要实现的方法。
public interface MyService {
String doSomething();
}
2、实现Service接口:
@Service
public class MyServiceImpl implements MyService {
@Override
public String doSomething() {
return "Something done!";
}
}
注意@Service
注解,它告诉Spring这是一个Service组件,应该被管理在Spring容器中。
3、在Controller中注入Service:
在你的Controller中,你可以使用@Autowired
或@Inject
注解来注入Service。
@RestController
@RequestMapping("/api")
public class MyController {
private final MyService myService;
@Autowired
public MyController(MyService myService) {
this.myService = myService;
}
@GetMapping("/dosomething")
public ResponseEntity<String> doSomething() {
String result = myService.doSomething();
return ResponseEntity.ok(result);
}
}
现在,当你访问/api/dosomething
时,Controller会调用Service层中的doSomething()
方法。
二、从其他组件调用Service:
如果你需要从其他非Controller组件(如另一个Service或组件)调用Service层的方法,你可以通过相同的方式注入Service。
@Component
public class AnotherComponent {
private final MyService myService;
@Autowired
public AnotherComponent(MyService myService) {
this.myService = myService;
}
public void someMethod() {
String result = myService.doSomething();
// Do something with the result
}
}
三、从启动类中调用Service:
1、编写一个SpringUtil工具类:
package com.example.iotdemo.util;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class SpringUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext = null;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
if(SpringUtil.applicationContext == null){
SpringUtil.applicationContext = applicationContext;
}
}
//获取applicationContext
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
//通过name获取 Bean.
public static Object getBean(String name){
return getApplicationContext().getBean(name);
}
//通过class获取Bean.
public static <T> T getBean(Class<T> clazz){
return getApplicationContext().getBean(clazz);
}
//通过name,以及Clazz返回指定的Bean
public static <T> T getBean(String name,Class<T> clazz){
return getApplicationContext().getBean(name, clazz);
}
}
这样就可以从容器中获取组件了
在启动类写 下代码:
//注入service
private static MyService myService;
public static void main(String[] args) throws InterruptedException {
SpringApplication.run(TestApplication.class, args);
ApplicationContext context = SpringUtil.getApplicationContext();
myService= context.getBean(MyService.class);
//调用service方法
myService.someMethod();
}