Почему сложно получить applicationContext из приложения Springboot? - PullRequest
0 голосов
/ 20 января 2020

Я не являюсь носителем английского языка sh ... там, возможно, некоторые ошибки в выражении, пожалуйста, прости меня ..

//import org.springframework.context.ApplicationContext;

//in a @Component class
@Autowired
private static ApplicationContext context

Я надеюсь, что приведенный выше код может работать, переменная поля context может получить контекста приложения Springboot ... но на самом деле это не работает.

Я искал некоторые средства для достижения этой цели, но я думаю, что они сложные, например, реализация ApplicationContextAware ...

Пожалуйста, подумайте о заводской схеме. Некоторые экземпляры, которые может возвращать фабричный класс, имеют переменную поля, для которой требуется @Autowired, поэтому они должны управляться Spring, а фабрика должна return applicationContext.getBean(...), не может использовать return new ... или return Class.forName(...) .. ..

Я думаю, что фабричный шаблон должен широко использоваться, и я хочу использовать его, чтобы доказать, что имеет смысл получить экземпляр ApplicationContext приложения с пружинной загрузкой просто как верхний код ... И почему сейчас все еще сложно?

Спасибо.

1 Ответ

0 голосов
/ 20 января 2020

Вы можете думать о Spring как о фабрике, которая может создавать объекты для вас. Эти объекты называются «бобами» в весеннем мире.

Итак, обычно бобы не имеют доступа к фабрике, которая их создала.

Например, подумайте о фабрике, которая производит «автомобили» как у тойоты форда. С точки зрения OOP, вы можете «купить» или «вести» автомобиль (экземпляр класса Car), но этот завод создает этот экземпляр (делает new Car). Поскольку фактическая машина управляется весной, это боб. Теперь, если вы описываете автомобиль как класс в Java, не имеет смысла иметь что-то подобное, верно?

@Component
public class Car {

   ... 
   private CarFactory carFactory;
} 

Так что Spring уже «скрывает» завод для вас, и у вас есть класс Car «чистый» шаблон.

Теперь, что касается самого контекста приложения. Это на самом деле эта фабрика - и, как уже говорили наши коллеги, вам не следует использовать ссылку на контекст приложения в ваших компонентах.

Если вам это действительно нужно, вы можете добавить контекст приложения, но тогда не будьте статичны c, и в целом лучше получить к нему доступ из классов @Configuration, которые должны обеспечивать возможность создания bean-компонентов более гибкими способами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...