- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我发现 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();
}
问题:如何将 ServiceA
和 ServiceB
注入(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/
我是一名优秀的程序员,十分优秀!