Полное имя класса с @Conditional - PullRequest
0 голосов
/ 02 апреля 2020

В видео курса о весенней загрузке и автоконфигурации

enter image description here

В нем говорится, что мы могли бы использовать вместо этого полное имя класса type = { "a.b.c.Foo" } value = { Foo.class } если мы не хотим зависеть от объекта класса во время компиляции.

Можете ли вы объяснить мне, что это значит?

1 Ответ

2 голосов
/ 02 апреля 2020

Использование type = { "a.b.c.Foo" } будет компилироваться, даже если на вашем пути к классам нет класса a.b.c.Foo, тогда как value = { a.b.c.Foo.class } требует, чтобы Foo был на вашем пути к классам хотя бы во время компиляции. Из-за природы аннотаций оба варианта могут быть выполнены, даже если a.b.c.Foo отсутствует в пути к классам во время выполнения - по крайней мере, при некоторых обстоятельствах:

JavaDo c из @ConditionalOnClass.value

Поскольку эта аннотация анализируется путем загрузки байт-кода класса, можно с уверенностью указать здесь классы, которые могут в конечном итоге отсутствовать в пути к классам, только если эта аннотация находится непосредственно на уязвимом компоненте и не , если эта аннотация используется в качестве составной метааннотации. Чтобы использовать эту аннотацию в качестве метааннотации, используйте только атрибут {@link #name}.

Обычно аннотацию @ConditionalOnClass можно использовать для выполнения конфигураций, зависящих от других классов. присутствовать.

Например, у вас могут быть разные конфигурации облачного хранилища AWS, GCP и Azure. Каждая из этих конфигураций регистрирует компонент CloudUpload. А с @ConditionalOnClass вы выполняете только ту конфигурацию, которая в настоящее время действительна, т.е. если AWS SDK находится на пути к классам, вы конфигурируете bean-компонент S3CloudUpload, ...

Это просто путем адаптации вашего развертывание / classpath вы настраиваете свое программное обеспечение другим способом.

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