【发布时间】:2019-01-19 22:48:56
【问题描述】:
我想像下面的代码一样在枚举中自动装配服务。
public enum TopupChargeService {
TYPE1{
public Response fun() {
return new ServiceRepo().getService().func1();
}
},
TYPE2{
public Response fun() {
return new ServiceRepo().getService().func2();
}
};
public abstract Response fun();
@Component
public static class ServiceRepo {
private Service service;
public Service getService() {
return service ;
}
public ServiceRepo () {
service = new ServiceImpl();
}
}
}
并且服务代码类似于以下代码。
@Service
public class ServiceImpl implements Service {
@Autowired
private RestTempalte restTemplate;
Response fun1(){
// use restTemplate in this fun
}
Response fun2(){
// use restTemplate in this fun
}
}
我还在配置类中将 restTemplate 定义为 bean。但 restTemplate 为空。
我的问题:1- 调用服务的方式是否正确? 2- 为什么 restTemplate 为空?
【问题讨论】:
-
你在使用spring-boot吗?如果是这样,哪个版本或spring MVC,对于spring boot,如果你使用spring mvc,它将自动工作使用这个@Bean public RestTemplate restTemplate() { return new RestTemplate(); }
-
不正确,你有你的
ServiceRepo作为一个组件,你手动调用new ServiceRepo()2次