gpt4 book ai didi

spring - 如何在 Spring 中使用注释 Autowiring 第 3 方类?

转载 作者:行者123 更新时间:2023-12-02 07:25:36 26 4
gpt4 key购买 nike

我发现 Spring Boot 的大多数示例都专注于构建简单的 Web 应用程序。也就是说,您可以完全控制一切的 Web 应用程序。

另一方面,我不太幸运地找到了如何构建非 Web 应用程序的示例,其中应用程序的大部分依赖于第 3 方代码。

考虑下面我的 com.mypackage.Application 类。

package com.mypackage;

import com.3rdparty.factory.ServiceFactory;

public class Application {

private final ServiceFactory sf;

public Application(ServiceFactory sf) {
this.sf = sf;
}

public void doSomeWork() {
ServiceA sa = sf.getServiceA();
[...]
}

Application 类只是实例化 DefaultManager 并调用 run()

现在,第 3 方 ServiceFactory 类具有额外的依赖项:

package com.3rdparty.factory;

import com.3rdparty.service.ServiceA;
import com.3rdparty.service.ServiceA;

public class ServiceFactory {

private final ServiceA sa;
private final ServiceB sb;

public ServiceFactory(ServiceA sa, ServiceB sb) {
this.sa = sa;
this.sb = sb;
}

public ServiceA getServiceA() {
return sa;
}

public ServiceB getServiceB() {
return sb;
}

}

我可以从 Main 类启动 Application:

import com.mypackage.Application;

public class Main {

public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("path/to/applicationContext.xml");
Application app = (Application) context.getBean("app");
app.doSomeWork();
}

问题:如何将 ServiceAServiceB 注入(inject) ServiceFactory 中。这是一个第三方类,我无法控制它,也无法修改它。因此,我无法添加任何注释。

我可以轻松地使其与 XML 配置一起使用,但考虑到注释似乎是目前的“最佳实践”方式,我想知道如何使其与注释一起使用。

如果注解的方式涉及大量代码,那么我想知道与我认为很容易理解的 XML 配置相比,这给我带来了哪些优势;以及一种易于跨不同项目使用的模式。

最佳答案

您需要定义一个 @Configuration 类,将 SomeFactory 构建为 Bean:

@Configuration
class SomeFactoryConfiguration {
@Bean
public ServiceFactory serviceFactory() {
return new ServiceFactory(/* create/get ServiceA and ServiceB somehow */):
}
}

这会将此 ServiceFactory 实例公开为 Spring 应用程序中的 Bean,您可以简单地 Autowiring 它。

如果您愿意,也可以将 ServiceA 和 ServiceB 创建为 Bean,然后在创建 ServiceFactory 时引用它们:

@Configuration
class SomeFactoryConfiguration {
@Bean
public ServiceFactory serviceFactory() {
return new ServiceFactory(serviceA(), serviceB()):
}
@Bean
public ServiceA serviceA() {
return new ServiceA();
}
@Bean
public ServiceB serviceB() {
return new ServiceB();
}
}

关于spring - 如何在 Spring 中使用注释 Autowiring 第 3 方类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36010544/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com