Spring Boot Java -初始化自动连线服务的正确方法

2g32fytz  于 2022-11-23  发布在  Spring
关注(0)|答案(1)|浏览(176)

我继承了一个springboot应用程序。这个应用程序有一个类似下面的服务:

@Service
public class MyService {
String param1 = "";
String param2 = "";

    public void doStuff() {
        // do stuff assuming the parameters param1 and param 2 of this autowired service have already been initialized
   }
}

,此服务是从与以下服务类似的另一个服务自动连接的;

@Service
public MainService {

@Autowired MyService myService;

    public performWork() {

       this.myService.doStuff();
    }
}

,最后,springboot应用程序类似于下面的代码:当Kafka主题有一条消息时,就会调用listen()方法(Kafka在这里只是相关的,因为它启动了autowired服务的调用):

@SpringBootApplication
public class MyApplication {

@Autowired
MainService mainService;

    public static void main(String[] args) {

            SpringApplication.run(MyApplication.class, args);
    }

    @KafkaListener(topics = "myTopic")
    public void listen(String message) {

        this.graphicService.performWork();

     }
}

我的问题是:在调用其doStuff()方法之前,在MyService服务上初始化参数param 1和param 2的正确方法是什么?
我不会使用bean配置文件,而是将其作为springboot应用程序启动的一部分来执行。任何建议都是非常感谢的。谢谢

ilmyapht

ilmyapht1#

根据我的理解,您只需要在bean初始化时执行初始化语句。创建bean后,您可以使用PostConstruct注解来完成任何需要完成的工作。
MyService类应如下所示

@Service
public class MyService {

    String param1;
    String param2;

    @PostConstruct
    public void postConstructRoutine() {
        // initialize parameters
        param1 = "some_value";
        param2 = "some_other_value";
    }

    public void doStuff() {
        // do stuff
   }

}

PostConstruct注解用于需要在依赖注入完成后执行以执行任何初始化的方法。
您可以在documentation中找到有关注解的更多信息。
顺便说一句,使用构造函数注入总是比使用Autowired更好,我强烈推荐使用它。

相关问题