2014-09-10 15 views
13
@Configuration 
public class MyConfig { 
    @Bean(name = "myObj") 
    public MyObj getMyObj() { 
     return new MyObj(); 
    } 
} 

Tôi có đối tượng MyConfig này với @Configuration Spring annotation. Câu hỏi của tôi là làm thế nào tôi có thể lấy bean lập trình (trong một lớp thông thường)? Ví dụ:truy xuất Bean theo chương trình

ví dụ, đoạn mã trông như thế này. Cảm ơn trước.

public class Foo { 
    public Foo(){ 
    // get MyObj bean here 
    } 
} 

public class Var { 
    public void varMethod(){ 
      Foo foo = new Foo(); 
    } 
} 
+0

Thử '@ Autowire'ing ... hoặc chính xác hơn' @Qualifier ("myObj") '. –

+0

Tôi không thể làm @Autowire vì tôi phải tạo đối tượng Foo bằng cách sử dụng mới trong thời gian chạy – user800799

+0

Kiểm tra [Chú giải trình điều khiển] (http://docs.spring.io/spring/docs/3.0.x/spring-framework-reference /html/beans.html#beans-autowired-annotation-qualifiers). –

Trả lời

6

Dưới đây là một ví dụ

public class MyFancyBean implements ApplicationContextAware { 

    private ApplicationContext applicationContext; 

    void setApplicationContext(ApplicationContext applicationContext) { 
    this.applicationContext = applicationContext; 
    } 

    public void businessMethod() { 
    //use applicationContext somehow 
    } 

} 

Tuy nhiên bạn hiếm khi cần phải truy cập trực tiếp ApplicationContext. Thông thường bạn bắt đầu nó một lần và để cho đậu tự cư trú tự động.

Ở đây bạn đi:

ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); 

Lưu ý rằng bạn không cần phải đề cập đến các file đã có trong applicationContext.xml. Bây giờ bạn chỉ có thể lấy một hạt đậu theo tên hoặc loại:

ctx.getBean("someName") 

Lưu ý rằng có những tấn cách để bắt đầu mùa xuân - sử dụng ContextLoaderListener, lớp @Configuration vv

2

Cách đơn giản nhất (mặc dù không phải là sạch nhất) cách tiếp cận nếu bạn thực sự cần phải lấy đậu từ ApplicationContext là phải có lớp học của bạn thực hiện các giao diện ApplicationContextAware và cung cấp các phương pháp setApplicationContext().

Khi bạn có tham chiếu đến số ApplicationContext bạn có quyền truy cập vào nhiều phương thức sẽ trả về các phiên bản bean cho bạn.

Nhược điểm là điều này làm cho lớp của bạn biết về bối cảnh mùa xuân, cái nào nên tránh trừ khi cần thiết.

5

Hãy thử điều này:

public class Foo { 
    public Foo(ApplicationContext context){ 
     context.getBean("myObj") 
    } 
} 

public class Var { 
    @Autowired 
    ApplicationContext context; 
    public void varMethod(){ 
      Foo foo = new Foo(context); 
    } 
} 
+1

@Xstian Tôi cũng đi qua 'ApplicationContext'. ; D –

+0

Bạn nói đúng, là các giải pháp tương tự: D – Xstian

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