Большинство примеров в Spring Boot я нашел в центре внимания создание простых веб-приложений. То есть, веб-приложения, в которых вы полностью и полностью контролируете все.Как мне авторизовать сторонние классы с аннотациями весной?
С другой стороны, мне не повезло найти примеры того, как создавать не-веб-приложения, где большие части приложения зависят от стороннего кода.
Рассмотрите мой класс 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()
.
Теперь третья сторона 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;
}
}
Я мог бы запустить 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();
}
Вопрос: как я впрыснуть ServiceA
и ServiceB
в ServiceFactory
. Это класс третьей стороны, я не контролирую его, и я не могу его изменить. Таким образом, я не могу добавлять аннотации.
Я могу легко заставить это работать с конфигурацией XML, но учитывая, что аннотации, похоже, являются «наилучшей практикой» в этом отношении, я хотел бы знать, как я могу заставить это работать с аннотациями.
Если способ аннотации этого требует большого количества кода, то я хотел бы знать, какие преимущества это дает мне по сравнению с конфигурацией XML, которую я считаю довольно легко понять; и шаблон, который легко получить в разных проектах.