2013-02-15 37 views
7

Tôi đã có một bean Spring và trong Spring Bean, tôi có một sự phụ thuộc vào một danh sách các bean khác. Câu hỏi của tôi là: làm thế nào tôi có thể tiêm một danh sách chung của đậu như là một phụ thuộc của đậu đó?Tiêm danh sách đậu bằng cách sử dụng chú thích Spring @Configuration

Ví dụ, một số mã:

public interface Color { } 

public class Red implements Color { } 

public class Blue implements Color { } 

đậu của tôi:

public class Painter { 
    private List<Color> colors; 

    @Resource 
    public void setColors(List<Color> colors) { 
     this.colors = colors; 
    } 
} 

@Configuration 
public class MyConfiguration { 

    @Bean 
    public Red red() { 
    return new Red(); 
    } 

    @Bean 
    public Blue blue() { 
    return new Blue(); 
    } 

    @Bean 
    public Painter painter() { 
    return new Painter(); 
    } 
} 

Câu hỏi đặt ra là; làm thế nào để có được danh sách các màu sắc trong Painter? Ngoài ra, trên một lưu ý phụ: tôi có phải @Configuration trả về loại Giao diện hoặc lớp không?

Cảm ơn sự giúp đỡ!

+0

Bản sao có thể có của [Tự động chuyển đổi danh sách bằng cách sử dụng lược đồ util cho NoSuchBeanDefinitionException] (http://stackoverflow.com/questions/1363310/auto-wiring-a-list-using-util-schema-gives-nosuchbeandefinitionexception) – gstackoverflow

Trả lời

12

Những gì bạn phải làm việc, có @Resource hoặc @Autowired trên trình thiết lập phải tiêm tất cả các trường hợp Màu vào trường List<Color> của bạn.

Nếu bạn muốn trở thành rõ ràng hơn, bạn có thể trả về một bộ sưu tập như đậu khác:

@Bean 
public List<Color> colorList(){ 
    List<Color> aList = new ArrayList<>(); 
    aList.add(blue()); 
    return aList; 
}  

và sử dụng nó như một trường autowired theo cách này:

@Resource(name="colorList") 
public void setColors(List<Color> colors) { 
    this.colors = colors; 
} 

HOẶC

@Resource(name="colorList") 
private List<Color> colors; 

Về câu hỏi của bạn về việc trả lại giao diện hoặc triển khai, một trong hai cách sẽ hoạt động, nhưng giao diện ace nên được ưa thích.

+0

Xin chào Biju, cảm ơn câu trả lời. Tôi cũng nghĩ rằng nó sẽ làm việc, nhưng một đồng nghiệp nói rằng khi triển khai, Spring đã ném ngoại lệ. Tôi sẽ điều tra thêm một chút. Trong thời gian chờ đợi, tôi đã sử dụng cách tiếp cận tương tự như cách bạn đề xuất. –

+0

Hoàn hảo! Chỉ cần những gì tôi đang tìm kiếm! – Flyingcows00

+0

Có cách nào để đưa danh sách vào phương thức '@ Bean' khác không? Rõ ràng 'Danh sách' là khó xử để tiêm theo tên. Các khuyến nghị là sử dụng '@ Resource' nhưng điều này không hoạt động như một tham số phương thức. – Stewart

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