2010-03-04 35 views
5

Tôi thường chỉ @Đặt mọi thứ vào các đối tượng mùa xuân. Nhưng tôi đã gặp phải một tình huống mà tôi cần phải tự động tạo ra một số đối tượng yêu cầu các giá trị có thể được autowired.Vào mùa xuân, tôi có thể autowire đậu mới từ bên trong một bean autowired?

Tôi nên làm gì? Những gì tôi có thể làm là chỉ cần tự chuyển các giá trị autowired vào constructor của các đối tượng mới. Những gì tôi muốn làm là chỉ autowire mỗi đối tượng mới như tôi tạo ra nó.

@Service 
public class Foo { 
    @Autowired private Bar bar; 

    /** This creates Blah objects and passes in the autowired value. */ 
    public void manuallyPassValues() { 
     List<Blah> blahs = new LinkedList<Blah>(); 
     for(int i=0; i<5; ++i) { 
      Blah blah = new Blah(bar); 
      blahs.add(blah); 
     } 
     // ... 
    } 

    /** This creates Blah objects and autowires them. */ 
    public void useAutowire() { 
     List<Blah> blahs = new LinkedList<Blah>(); 
     for(int i=0; i<5; ++i) { 
      // How do I implement the createAutowiredObject method? 
      Blah blah = createAutowiredObject(Blah.class); 
      blahs.add(blah); 
     } 
     // ... 
    } 
} 

Lý tưởng nhất là tôi sẽ không có bất kỳ thông tin cấu hình nào trong bean này. Nó autowired, vì vậy bất kỳ đối tượng nó cần phải làm autowiring của đậu mới nên có sẵn để nó bằng cách autowiring chúng trong

Trả lời

10

Bạn có thể sử dụng AutowireCapableBeanFactory:.

@Service 
public class Foo { 
    @Autowired private AutowireCapableBeanFactory factory; 

    private <T> T createAutowiredObject(Class<T> c) { 
     return factory.createBean(c); 
    } 
    ... 
} 
Các vấn đề liên quan