11

Tôi có một ứng dụng web với mùa xuân 3.0. Tôi cần phải chạy một lớp học với phương pháp chính từ một cron sử dụng đậu được xác định trong appcontext xml (sử dụng thành phần quét annocations). Tôi có lớp chính của tôi trong cùng một thư mục src. Làm thế nào tôi có thể tiêm đậu từ ngữ cảnh web vào phương thức chính. Tôi đã cố gắng thực hiện việc đó bằng cách sử dụngtiêm đậu mùa xuân trong một lớp phương pháp chính

ApplicationContext context = new ClassPathXmlApplicationContext("appservlet.xml"); 

Tôi đã cố sử dụng AutoWired và trả về một giá trị rỗng. Vì vậy, tôi sử dụng ứng dụng ctx và điều này là tạo ra một bối cảnh mới (như mong đợi) khi tôi chạy phương pháp chính. Nhưng có thể tôi có thể sử dụng các loại đậu hiện có từ container.

@Autowired 
static DAO dao; 

    public static void main(String[] args) { 
       ApplicationContext context = new ClassPathXmlApplicationContext("xman-   servlet.xml"); 
    TableClient client = context.getBean(TableClient.class); 
    client.start(context); 

} 
+1

Đối với người đọc trong tương lai, câu hỏi có liên quan chặt chẽ: http://stackoverflow.com/questions/3659720/spring-3-autowire-in-standalone-application – Jonik

Trả lời

1

Bạn có thể sử dụng ngữ cảnh mùa xuân cho ứng dụng chính của mình và sử dụng lại các hạt giống như ứng dụng web. Bạn thậm chí có thể tái sử dụng một số tệp cấu hình Spring XML, miễn là chúng không định nghĩa các bean chỉ có ý nghĩa trong ngữ cảnh webapp (yêu cầu phạm vi, bộ điều khiển web, v.v.).

Nhưng bạn sẽ nhận được các phiên bản khác nhau, vì bạn sẽ có hai JVM đang chạy. Nếu bạn thực sự muốn sử dụng lại cùng một cá thể bean, thì lớp chính của bạn nên gọi từ xa một số phương thức của một bean trong webapp của bạn, sử dụng một dịch vụ web, hoặc HttpInvoker.

4

Bạn không thể chèn một bean Spring vào bất kỳ đối tượng nào không được tạo ra bởi mùa xuân. Một cách khác để nói đó là: Mùa xuân chỉ có thể tiêm vào các đối tượng mà nó quản lý.

Vì bạn đang tạo ngữ cảnh, bạn sẽ cần gọi getBean cho đối tượng DAO của bạn.

Kiểm tra Spring Batch nó có thể hữu ích cho bạn.

2

Hãy thử với Main này:

public class Main { 

    public static void main(String[] args) { 
     Main p = new Main(); 
     p.start(args); 
    } 

    @Autowired 
    private MyBean myBean; 
    private void start(String[] args) { 
     ApplicationContext context = 
      new ClassPathXmlApplicationContext("classpath*:/META-INF/spring/applicationContext*.xml"); 
     System.out.println("The method of my Bean: " + myBean.getStr()); 
    } 
} 

Và Bean này:

@Service 
public class MyBean { 
    public String getStr() { 
     return "mybean!"; 
    } 
} 
1

mùa xuân khởi động cung cấp một giải pháp chính thức cho việc này. Tải về một bộ xương từ

https://start.spring.io/

và đảm bảo bao bì trong pom.xml được thiết lập để jar. Miễn là bạn không bao gồm bất kỳ sự phụ thuộc web nào, ứng dụng sẽ vẫn là một ứng dụng giao diện điều khiển.

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