Как получить аргумент командной строки внутри BeanFactoryPostProcessor? - PullRequest
0 голосов
/ 15 января 2019

Я использую Spring boot для своего приложения, написанного на Kotlin. Я могу получить аргументы командной строки, используя Environment.getProperty("nonOptionArgs", Array<String>::class.java)

Однако внутри BeanFactoryPostProcessor я не могу автоматически подключить среду - так как этот постпроцессор работает слишком рано в жизненном цикле. Как я могу получить доступ к аргументам командной строки внутри BeanFactoryPostProcessor?

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Ну, вы можете реализовать свой BeanFactoryPostProcessor с EnvironmentAware, чтобы получить Environment:

@Component
public class FooBeanFactoryPostProcessor implements BeanFactoryPostProcessor , EnvironmentAware{

    private Environment env;

    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {

            env.getProperty("nonOptionArgs");
            //I should be able to access env at here .Hehe

    }

    @Override
    public void setEnvironment(Environment environment) {
            this.env = environment;
    }

}
0 голосов
/ 15 января 2019

Из вашего комментария:

Я бы хотел определить бины динамически на основе аргумента команды ценности. Зачем мне это делать в BeanFactoryPostProcessor - это обязательно что определения бина есть до фактической реализации бина - так что я не нуждается в аннотации @DependsOn.

Что касается условной загрузки bean-компонентов (например, автоконфигурирования при весенней загрузке), я бы сказал, что гораздо удобнее использовать аннотации @ ConditionalXXX , в частности, @ ConditionalOnProperty .

Ссылка на Java-документ для @ConditionalOnProperty здесь они сказали:

Условно проверяет, имеют ли указанные свойства определенный значение. По умолчанию свойства должны присутствовать в среде и не равно ложному. Имеющие значение () и matchIfMissing () Атрибуты позволяют дальнейшую настройку.

Так что вы можете сделать что-то похожее на:

@ConditionalOnProperty(prefix = "my.env", name = "var", havingValue = "true", matchIfMissing = false)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...