2015-05-24 14 views
5

Sto sviluppando un'applicazione Stivale Primavera che utilizza alcune interfacce Repository primavera dati:Primavera trovare autowired su un altro pacchetto

package test; 
@SpringBootApplication 
public class Application implements CommandLineRunner { 

    @Autowired 
    private BookRepository repository; 
    . . . 
} 

posso vedere che l'interfaccia BookRepository (che segue qui) può essere iniettato solo se è nello stesso pacchetto come classe di applicazione:

package test; 
public interface BookRepository extends MongoRepository<Book, String> { 

    public Book findByTitle(String title); 
    public List<Book> findByType(String type); 
    public List<Book> findByAuthor(String author); 

} 

c'è qualche annotazione Stivale Primavera posso applicare su mie classi per essere in grado di trovare la BookRepository in un altro pacchetto?

risposta

13

Utilizzare un'annotazione @ComponentScan fianco @SpringBootApplication e configurare un pacchetto di base personalizzato (è possibile specificare un elenco di nomi di pacchetti o di un elenco delle classi il cui pacchetto sarà usato), così per esempio

@SpringBootApplication 
@ComponentScan(basePackages = {"otherpackage", "..."}) 
public class Application 

oppure

@SpringBootApplication 
@ComponentScan(basePackageClasses = {otherpackage.MyClass.class, ...}) 
public class Application 

Si noti che la scansione dei componenti troverà le classi all'interno e sotto i pacchetti specificati.

+0

Grazie per il vostro aiuto! – user2824073

+0

In realtà questo è obsoleto. Puoi farlo direttamente su @SpringBootApplication (scanBasePackages = {"...", ",,,"}) –

Problemi correlati