Весна: как скрыть бин от внедрения зависимостей? - PullRequest
2 голосов
/ 02 марта 2011

Ситуация такова, что у меня есть два разных пакета ресурсов, общий и более конкретный.У них нет общих ключей сообщений.

Общий:

<bean id="messageSourceGlobal" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basename" value="messages/messagesGlobal" />
</bean>

Я включаю общий в свой конкретный (очевидно, другой файл):

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basename" value="messages/messages" />
    <property name="parentMessageSource" ref="messageSourceGlobal" />
</bean>

Затем Java-код автоматически связывает его:

@Autowired
private MessageSource messages;

Это вызовет исключение при запуске веб-приложения, поскольку найдены два MessageSource.Очевидно, я могу использовать @Qualifier, чтобы прояснить Spring, что я хочу.Однако общий пакет ресурсов не будет использоваться в одиночку.Поэтому я подумал, что в этом случае имеет смысл скрывать общий пакет ресурсов от внедрения зависимостей.Одним из преимуществ будет то, что другие не будут сталкиваться с «дубликатами».

Возможно ли это?Как бы я это сделал?

Ответы [ 2 ]

5 голосов
/ 02 марта 2011

Конечно, вы можете добавить autowire-candidate="false" к определению bean-компонента, который вы хотите скрыть .

2 голосов
/ 16 октября 2013

Во многих случаях может быть лучше продвигать один компонент с primary = "true" или @ Primary вместо того, чтобы понижать всех других кандидатов с помощью autowire-candid = "ложь ".

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