sbr*_*tla 4 spring autowired spring-boot
Spring Boot上的大多数示例都发现我专注于构建简单的Web应用程序.也就是说,您完全可以完全控制所有内容的Web应用程序.
另一方面,我没有太多运气找到如何构建非Web应用程序的示例,其中应用程序的较大部分依赖于第三方代码.
考虑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();
[...]
}
Run Code Online (Sandbox Code Playgroud)
本Application
类只实例化DefaultManager
,并调用run()
.
现在,第三方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;
}
}
Run Code Online (Sandbox Code Playgroud)
我可以Application
从Main
课堂上发布:
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();
}
Run Code Online (Sandbox Code Playgroud)
问题:我如何注入ServiceA
和ServiceB
进入ServiceFactory
.这是第三方课程,我无法控制它,我无法修改它.因此,我无法添加任何注释.
我可以很容易地使用XML配置,但考虑到注释似乎是这种做法的"最佳实践"方式,我想知道如何使用注释来处理它.
如果这样做的注释方式涉及大量代码,那么我想知道这与我认为很容易理解的XML配置相比有什么优势; 以及一个易于跨越不同项目的模式.
mhl*_*hlz 13
您需要定义一个@Configuration
构建SomeFactory
Bean的类:
@Configuration
class SomeFactoryConfiguration {
@Bean
public ServiceFactory serviceFactory() {
return new ServiceFactory(/* create/get ServiceA and ServiceB somehow */):
}
}
Run Code Online (Sandbox Code Playgroud)
这将在Spring应用程序中将此ServiceFactory实例公开为Bean,您可以简单地自动装配.
如果需要,您也可以创建ServiceA和ServiceB作为Beans,然后在创建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();
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3555 次 |
最近记录: |