2015-01-21 19 views
10

Tôi đang sử dụng @ComponentScan@Component để xác định hạt đậu mùa xuân của mình. Những gì tôi muốn là tuyên bố một trong những loại đậu này là autowire-candidate=false.Làm thế nào để khai báo một autowire bean bean = "false" khi sử dụng chú thích?

Điều này có thể được thực hiện với thuộc tính này trong xml. Không có tương đương trong chú thích?

Lý do tôi muốn điều này là do tôi có 2 triển khai cùng một giao diện và tôi không muốn sử dụng @Qualifier.

EDIT: Sử dụng @Primary là một công việc hợp lệ xung quanh, nhưng autowire-ứng cử viên dường như với tôi như một tính năng hữu ích với ngữ nghĩa riêng của nó.

Cảm ơn

+2

Chú thích từ ưa thích bằng '@ Primary'. Không cần sử dụng '@ Qualifier' theo cách đó. –

+0

Cảm ơn nhận xét. Có, đó thực sự là một cách tôi đã tìm thấy để khắc phục vấn đề, nhưng tôi chỉ tự hỏi làm thế nào đến không có tương đương với autowire-ứng cử viên trong chú thích. –

+2

Có vẻ như Spring đã từ chối khái niệm 'autowire-candidate = false' và nó không còn được hỗ trợ nữa. Không có sự tương tự với chú thích, vì vậy '@ Primary' chỉ là cách bạn nhận thấy. –

Trả lời

5

Có vẻ như Spring từ chối autowire-candidate=false khái niệm và không còn được hỗ trợ. Không có sự tương tự với chú thích, vì vậy @Primary là công việc tốt nhất khi bạn nhận thấy.

Một cách khác là sử dụng tùy chỉnh org.springframework.beans.factory.support.AutowireCandidateResolver, được sử dụng trong DefaultListableBeanFactory, với logic loại trừ các hạt không mong muốn khỏi các ứng cử viên tự động. Trong trường hợp này, công nghệ sẽ tương tự như công nghệ được sử dụng cho autowire-candidate=false trong SimpleAutowireCandidateResolver.

0

Bạn cũng có thể sử dụng trình truy cập bean để điều chỉnh chế độ hiển thị.

thấy Bean visibility

@Configuration 
public abstract class VisibilityConfiguration { 

    @Bean 
    public Bean publicBean() { 
     Bean bean = new Bean(); 
     bean.setDependency(hiddenBean()); 
     return bean; 
    } 

    @Bean 
    protected Bean hiddenBean() { 
     return new Bean("protected bean"); 
    } 
} 

Bạn có thể sau đó @Autowire lớp Bean và nó sẽ autowire đậu public (không có phàn nàn về nhiều đậu khớp)

Là một lớp định nghĩa (trừ khi nhúng) không cho phép private/protected truy cập công việc xung quanh sẽ được sử dụng một lớp @Configuration rằng sẽ nhanh chóng tất cả các đậu một công bố đậu công cộng trong khi che giấu tin/bảo vệ (thay vì trực tiếp chú thích các lớp @Component \ @Service)

Cũng gói được bảo vệ bằng accessor có thể đáng để cố gắng để che giấu @Component các lớp được chú thích. Tôi không biết liệu điều đó có thể hiệu quả hay không.

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