Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 Как правильно инжектить бин в статическом методе main?  [new]
Molasar
Member

Откуда:
Сообщений: 699
Всем привет!

Есть класс, есть класс с настройками бина этого класса.
Как правильно инжектить бин в статическом методе main?

если делаем так, то получаем Exception in thread "main" java.lang.NullPointerException:
@SpringBootApplication
public class Application {
    
    @Autowired
    CountryClient countryClient;

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
        String country = "Spain";
               
        Application app = new Application();

        GetCountryResponse response = app.countryClient.getCountry(country);
        System.out.println(response.getCountry().getCurrency());
    }

}

Нашел только такой способ, но он кажется мне устаревшим:
@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
        String country = "Spain";
        
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(CountryConfiguration.class);
        CountryClient countryClient = ctx.getBean(CountryClient.class);
 
        GetCountryResponse response = countryClient.getCountry(country);
        System.out.println(response.getCountry().getCurrency());
    }

}

Может кто знает другие варианты?
8 фев 19, 09:36    [21804034]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно инжектить бин в статическом методе main?  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5183
Molasar,

этого делать там не надо. Если вы что-то хотите сделать после того, как приложение "стартануло", есть
CommandLineRunner или ApplicationRunner
8 фев 19, 10:08    [21804072]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно инжектить бин в статическом методе main?  [new]
lleming
Member

Откуда:
Сообщений: 1595
ApplicationContext context = SpringApplication.run(Application.class, args);


но правильнее CommanLineRunner и инжектом ApplicationContext
8 фев 19, 10:22    [21804084]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно инжектить бин в статическом методе main?  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5183
lleming
ApplicationContext context = SpringApplication.run(Application.class, args);


но правильнее CommanLineRunner и инжектом ApplicationContext


не надо ApplicationContext инжектить.

Можно ваще отдельной конфигурацией все оформить.


@Configuration
public class DevDataBaseInitializer {

 @Bean
  CommandLineRunner initDatabase(
      YourService yourService) {
    return args -> {yourService.yourMethod();};
)


Можно это же бин сделать в классе с @SpringBootApplication
8 фев 19, 10:37    [21804097]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно инжектить бин в статическом методе main?  [new]
alex55555
Member

Откуда:
Сообщений: 2129
Ужос, вот ведь сколько народ пользует этот свинг, а всё ещё о нём даже элементарных вещей не знает.

Инжектить в статический метод нельзя.

Интересно, этого действительно нет в документации и потому я имею право ещё раз удовлетворённо сказать - свниг отстой?

ЗЫ. Вообще, а документацию хоть кто-то читал? Или всё на примерчиках да на вот таких вот вопросах выезжаем? Привычка находить ответы только на стэковерфлоу до добра не доводит.
8 фев 19, 13:26    [21804297]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно инжектить бин в статическом методе main?  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5183
alex55555
Ужос, вот ведь сколько народ пользует этот свинг, а всё ещё о нём даже элементарных вещей не знает.

Инжектить в статический метод нельзя.

Интересно, этого действительно нет в документации и потому я имею право ещё раз удовлетворённо сказать - свниг отстой?

ЗЫ. Вообще, а документацию хоть кто-то читал? Или всё на примерчиках да на вот таких вот вопросах выезжаем? Привычка находить ответы только на стэковерфлоу до добра не доводит.


не смотря на сам вопрос, человек инжектит прокси в инстанс класс .а уж статик метод взаимодействует с этим прокси, работа чего зависит от положения звезд на небе , но работать вполне может.
8 фев 19, 13:34    [21804312]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно инжектить бин в статическом методе main?  [new]
alex55555
Member

Откуда:
Сообщений: 2129
Озверин
человек инжектит прокси в инстанс класс .а уж статик метод взаимодействует с этим прокси, работа чего зависит от положения звезд на небе , но работать вполне может.

Инстанс создаётся в статическом методе. Звёзды не повлияют на неработоспособность такого варианта. Он просто никогда не сработает, независимо от звёзд.

Для понимания стоит просто представить, как и откуда появляется ссылка в поле класса. И потом сравнить с использованным вариантом. Вообще-то это элементарно.
9 фев 19, 13:41    [21805183]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно инжектить бин в статическом методе main?  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5183
alex55555
Озверин
человек инжектит прокси в инстанс класс .а уж статик метод взаимодействует с этим прокси, работа чего зависит от положения звезд на небе , но работать вполне может.

Инстанс создаётся в статическом методе. Звёзды не повлияют на неработоспособность такого варианта. Он просто никогда не сработает, независимо от звёзд.

Для понимания стоит просто представить, как и откуда появляется ссылка в поле класса. И потом сравнить с использованным вариантом. Вообще-то это элементарно.


Конечно же молодой человек не создает никакой инстанс в статическом методе - для этого хватает лишь посмотреть его код. Вообщем-то - это элементарно. И это будет работать, в зависимости от того, успелся инициализироваться контекст до вызова метода - или нет.

 @Autowired
    CountryClient countryClient;
9 фев 19, 14:55    [21805226]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно инжектить бин в статическом методе main?  [new]
alex55555
Member

Откуда:
Сообщений: 2129
Озверин
Конечно же молодой человек не создает никакой инстанс в статическом методе - для этого хватает лишь посмотреть его код. Вообщем-то - это элементарно. И это будет работать, в зависимости от того, успелся инициализироваться контекст до вызова метода - или нет.

Это что за инициализация такая, которая неизвестно когда закончится? Убогой либе специально суют класс, но оно поданный класс тупо игнорирует и ничего не инициализирует. И вот оказывается, оно как-то там хитро инициализируется! Не знал. Но с другой стороны это же отличный повод сказать с ещё большей уверенностью - свинг = отстой. Тупо стартовать не умеет. Нужно потанцевать с бубном, что бы это поделие хоть на что-то было способно.

Хотя может чел чего-то в файликах наконфигурил, а свинг же тупой, противоречия в настройках воспринимает как захочет.
10 фев 19, 15:25    [21805682]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно инжектить бин в статическом методе main?  [new]
mayton
Member

Откуда: loopback
Сообщений: 40982
Чувак.

Swing и Spring это кагбе разные вещи.
10 фев 19, 21:56    [21805845]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно инжектить бин в статическом методе main?  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5183
alex55555
Озверин
Конечно же молодой человек не создает никакой инстанс в статическом методе - для этого хватает лишь посмотреть его код. Вообщем-то - это элементарно. И это будет работать, в зависимости от того, успелся инициализироваться контекст до вызова метода - или нет.

Это что за инициализация такая, которая неизвестно когда закончится? Убогой либе специально суют класс, но оно поданный класс тупо игнорирует и ничего не инициализирует. И вот оказывается, оно как-то там хитро инициализируется! Не знал. Но с другой стороны это же отличный повод сказать с ещё большей уверенностью - свинг = отстой. Тупо стартовать не умеет. Нужно потанцевать с бубном, что бы это поделие хоть на что-то было способно.

Хотя может чел чего-то в файликах наконфигурил, а свинг же тупой, противоречия в настройках воспринимает как захочет.


причем тут свинг? когда инициализация закончится - известно. Тебя все время несет куда-то, где ты понятия ничего не имеешь, о чем разговор.
11 фев 19, 09:23    [21806065]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно инжектить бин в статическом методе main?  [new]
alex55555
Member

Откуда:
Сообщений: 2129
mayton
Swing и Spring это кагбе разные вещи.

Да, согласен, перепутал :(
11 фев 19, 13:41    [21806356]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно инжектить бин в статическом методе main?  [new]
mad_nazgul
Member

Откуда:
Сообщений: 4700
alex55555
Ужос, вот ведь сколько народ пользует этот свинг, а всё ещё о нём даже элементарных вещей не знает.

Инжектить в статический метод нельзя.


Инжектить нельзя, а вот из контекста приложения вытащить можно ;-)

alex55555
Интересно, этого действительно нет в документации и потому я имею право ещё раз удовлетворённо сказать - свниг отстой?

ЗЫ. Вообще, а документацию хоть кто-то читал? Или всё на примерчиках да на вот таких вот вопросах выезжаем? Привычка находить ответы только на стэковерфлоу до добра не доводит.


А вот с примерами иногда бывает "засада", там как раз многие вещи демонстрируются в методе "public static void main(String... args)".
Что как бы не хорошо.
25 фев 19, 09:30    [21818476]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно инжектить бин в статическом методе main?  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5183
mad_nazgul, если такие примеры и есть, то они все из преданий старины глубокой. КоммандрРаннер сто лет как существует и в основном в нем происходит вся магия примеров.
25 фев 19, 09:33    [21818478]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно инжектить бин в статическом методе main?  [new]
mad_nazgul
Member

Откуда:
Сообщений: 4700
Озверин
mad_nazgul, если такие примеры и есть, то они все из преданий старины глубокой. КоммандрРаннер сто лет как существует и в основном в нем происходит вся магия примеров.


Ну если гуглить, то в основном такие примеры и выходят, без CoomandLineRunner :-)
26 фев 19, 11:55    [21819527]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить