2016-07-20 19 views
6

Tôi đang cố tạo một khởi động mới. Tôi có một mô-đun kinh doanh, nói ProjectManager, có chứa một số lớp được chú thích bằng @Component. Theo hướng dẫn, tôi đã tạo ra một mô-đun autoconfigure, nó chứa một lớp AutoConfiguration. Thứ nhất, tôi đã cố gắng sử dụng @ComponentSan để tìm các hạt trong mô-đun kinh doanh của tôi.@ComponentScan không hoạt động trong lớp Khởi động tự động cấu hình của Spring?

@ComponentScan(value = {"com.foo.project"}) 
@ConditionalOnClass({Project.class}) 
@Configuration 
public class ProjectAutoConfiguration { 
    .... 

} 

Nhưng nó không hoạt động. Tôi phải bổ sung thêm lớp cấu hình như sau:

@Configuration 
@ComponentScan(value = {"com.foo.project"}) 
@MapperScan(value = {"com.foo.project"}) 
public class ProjectConfig { 
} 

Và sau đó nhập nó vào lớp tự động cấu hình như dưới đây:

@Import(ProjectConfig.class) 
@ConditionalOnClass({Project.class}) 
@Configuration 
public class ProjectAutoConfiguration { 
    .... 

} 

đó làm việc. Nhưng theo mùa xuân doc.

tự động cấu hình được thực hiện với các lớp @Configuration chuẩn

Vì vậy, câu hỏi của tôi là, Tại sao @ComponentScan không làm việc ở đây? Tôi đã làm gì sai sao? Hay là do thiết kế?

Trả lời

6

bạn phải sử dụng chú thích compentscan vào lớp chính. Dưới đây là một số mẫu mã:

@SpringBootApplication 
@ComponentScan("com.foo.project") 
public class MainApplication extends SpringBootServletInitializer { 

    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
     return application.sources(MainApplication.class); 
    } 

    public static void main(String[] args) { 
     new MainApplication().configure(new SpringApplicationBuilder(MainApplication.class)).run(args); 
    } 
} 

Cheers

+0

Bạn có nghĩa là, các lớp học với phương pháp chính? – Dongqing

+0

có. chỉnh sửa bạn lớp chính như thế này. – emoleumassi

+0

Nó hoạt động để thêm nó vào lớp chính. Vì vậy, bạn có nghĩa là @ComponentScan chỉ làm việc với lớp chính trong khởi động mùa xuân? – Dongqing

0

Bạn có thể thử với sau đây?

@ConditionalOnClass({Project.class}) 
@Configuration 
@EnableAutoConfiguration 
@ComponentScan(value = {"com.foo.project"}) 
public class ProjectAutoConfiguration { 
    .... 

} 
+0

Tôi đã thêm @ EnableAutoConfiguration vào lớp chính của mình – Dongqing

3

tự động tất cả mọi thứ đòi hỏi các lớp ứng dụng (chú thích với @SpringBootApplication) để được trong một gói "cao hơn" so với các thành phần bạn muốn quét.

Sử dụng:

package com.example.foo; 

cho các ứng dụng của bạn và đặt các thành phần trong một gói như:

package com.example.foo.entities; 

Xem thêm https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-using-springbootapplication-annotation.html

Các vấn đề liên quan