2016-02-09 3 views
1

У меня есть два проекта A и B. Оба они построены с Maven, а проект A имеет зависимость от Maven для проекта B. Оба проекта имеют класс с аннотацией @Configuration, где я определяю @Beans.ComponentScan и Autowired не работают для зависимого проекта Spring?

У меня есть фасоль в проекте A, из обоих проектов. Если я использую @Autowired аннотацию в проекте A компонента, который определен в одном проекте, работает автоустановка. Однако, если я использую @Autowired аннотацию в проекте A компонента из проекта B, я получу исключение.

Что это значит? Как я могу autowire bean в проекте A, который определен в проекте B?

+0

Какое исключение? У вас есть проект B, указанный в качестве зависимости в вашем проекте. Файл pom? Являются ли файлы проекта B jar в пути класса для проекта A? – obi1

ответ

3

Обычно это проблема с базовым классом классов на ComponentScan.

Если вы, например, имеют следующие базовые пакеты

com.myproject.a 

и

com.myproject.b 

в вашем проекте A и B соответственно, и вы используете SpringBoot с основным классом

package com.myproject.a 

@Configuration 
@EnableAutoConfiguration 
@ComponentScan 
class MyApp { 
    // Some public static void main ... 
} 

он найдет ваши классы только в пакете com.myproject.a и это дети.

Чтобы решить эту проблему, вы должны улучшить @ComponentScan таким образом, чтобы он сканировал обе структуры пакетов, например.

package com.myproject.a 

@Configuration 
@EnableAutoConfiguration 
@ComponentScan(basePackages = {"com.myproject.a", "com.myproject.b"} 
// or basePackages = "com.myproject" in this example 
class MyApp { 
    // Some public static void main ... 
} 
+0

Хм, но проблема в том, что у меня есть отдельные классы @Configuration и бобы в обоих проектах A и B соответственно. Таким образом, бобы должны сканироваться обоими проектными сканерами. Проблема в том, что когда я пытаюсь Autowire bean из проекта B в проекте A, тогда он говорит, что он не может найти компонент. В вашем решении, я полагаю, я бы не определил какие-либо компоненты в проекте B, только в проекте A? – user1340582

+0

Привет, извините за то, что не понимаете. У вас есть один проект, который инициирует процесс сканирования. В вашем случае Project A. Этот первоначальный сканер должен знать о сканируемых пакетах. Это приводит его к месту, чтобы найти все @Configuration классы в деревьях пакетов. Надеюсь, это еще раз пояснит это. – Peter

+0

Спасибо за разъяснение :) Я думал, что есть два отдельных сканера, но теперь я получаю их. Благодаря! – user1340582

Смежные вопросы