Tôi có một ứng dụng web truy cập dịch vụ web bên ngoài. Tôi đang viết một bộ thử nghiệm chấp nhận tự động cho ứng dụng web. Tôi không muốn gọi dịch vụ web bên ngoài vì nó có phí tổn nghiêm trọng, tôi muốn thử dịch vụ web này. Làm thế nào để đạt được điều này mà không làm thay đổi bối cảnh ứng dụng của ứng dụng web? Gần đây chúng tôi đã di chuyển sang Spring 3.1 nên tôi bị cám dỗ sử dụng các tính năng môi trường mới. Những tính năng mới này có giúp tôi ghi đè dịch vụ web đơn này và để lại ngữ cảnh ứng dụng không?cách ghi đè bean đơn được xác định trong ngữ cảnh ứng dụng
Trả lời
Tôi sẽ sử dụng một số BeanFactoryPostProcessor
để thực hiện việc này, chỉ được đăng ký trong các trường hợp thử nghiệm mà bạn muốn mô phỏng này.
BeanFactoryPostProcessor
cho phép bạn sửa đổi ngữ cảnh ứng dụng ngay sau khi được tạo và điền. Bạn có thể tìm kiếm tên của bean cụ thể của bạn và đăng ký một bean khác cho nó.
public class SystemTestBeanFactoryPostProcessor implements BeanFactoryPostProcessor
{
@Override
public void postProcessBeanFactory(final ConfigurableListableBeanFactory factory) throws BeansException
{
final MyInterface myInterface = new MyInterfaceStub();
factory.registerSingleton("myInterfaceBeanName", myInterface);
}
}
Điều này sẽ cho phép bạn ghi đè chỉ những hạt bạn muốn nhập/thử.
Tôi không chắc rằng đây là cách 'mới nhất 3.x' để thực hiện việc này. Nhưng nó rất đơn giản và dễ thực hiện.
Tôi sẽ sử dụng tính năng Spring @Profile, mà tôi giả định là "các tính năng môi trường" mà bạn đang đề cập đến.
Ví dụ:
@Service @Profile("dev")
public class FakeWebService implements WebService {
}
@Service @Profile("production")
public class ExternalWebService implements WebService {
}
EDIT
Và để xác định các hồ sơ cá nhân để sử dụng trong thử nghiệm của bạn:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/app-config.xml")
@ActiveProfiles("dev")
public class MyAcceptanceTest {
}
Xem this section của các tài liệu Xuân để biết thêm chi tiết.
Có một số cách để thiết lập hồ sơ cá nhân hoạt động trong sản xuất, nhưng phương pháp tôi đã sử dụng trước đó là trong web.xml:
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>spring.profiles.active</param-name>
<param-value>production</param-value>
</init-param>
</servlet>
- 1. Ghi đè ngữ cảnh chọn jQuery mặc định
- 2. ghi đè cấu hình bean vào mùa xuân
- 3. Thêm Bean theo cách lập trình vào ngữ cảnh ứng dụng web mùa xuân
- 4. Sự khác biệt giữa @Autowired và nhận được một bean từ ngữ cảnh ứng dụng là gì?
- 5. Có thể ghi đè các định nghĩa bước trong ngữ cảnh không?
- 6. Cách xác định ngữ cảnh dịch trong Django {% trans%} {% blocktrans%}?
- 7. Xác định ngữ cảnh Servlet trong WAR-File
- 8. Tomcat bên trong Eclipse sẽ ghi đè các đoạn ngữ cảnh
- 9. Xóa Trình đơn ngữ cảnh trong TinyMCE
- 10. C# MVC: Cách ghi đè chuyển hướng xác thực được định cấu hình?
- 11. Thừa kế Bảng đơn Rails: Cách ghi đè giá trị được ghi vào trường loại
- 12. Cách ghi đè chính xác hàm SaveChanges trong EF 4.1
- 13. Làm cách nào để mở rộng danh sách và bản đồ đã được xác định trong ngữ cảnh ứng dụng Spring?
- 14. Xác định ngữ cảnh bên trong tệp WAR
- 15. Xử lý nhiều ứng dụng ghi đè các lệnh quản lý trong Django
- 16. Ghi đè hoặc ghi đè
- 17. Ngữ cảnh ứng dụng cho SharedPreferences?
- 18. ngữ cảnh gốc của ứng dụng grails
- 19. Ngữ cảnh ứng dụng mùa xuân có sẵn bên trong hàm tạo
- 20. Ghi đè cấu hình plugin Maven được xác định trong plugin pluginManagement từ dòng lệnh
- 21. Cách đóng ứng dụng WPF từ menu ngữ cảnh?
- 22. ghi đè phiên bản thư viện được xác định trong pom
- 23. Cách bắt đầu Intent nếu ngữ cảnh không phải là bối cảnh hoạt động nhưng ngữ cảnh ứng dụng
- 24. Ứng dụng web MVC mùa xuân: ngữ cảnh ứng dụng bắt đầu hai lần
- 25. Tải xuống ứng dụng Spring.properties dựa trên định nghĩa ngữ cảnh servlet tomcat
- 26. Giá trị hợp lệ được xác định cho @Scope trong ngữ cảnh mùa xuân và cổng thông tin ở đâu?
- 27. Chỉ định bối cảnh ứng dụng tùy chỉnh
- 28. Cách xác định cảnh báo trong bảng phân cảnh Xcode?
- 29. Cảnh báo: "... ghi đè Object.Equals (đối tượng o) nhưng không ghi đè lên Object.GetHashCode()"
- 30. Phân cấp bối cảnh mùa xuân với ngữ cảnh ứng dụng web
Nơi nào bạn chỉ định 'Profile' bạn đang sử dụng trong của bạn cấu hình thử nghiệm (hoặc cấu hình sản xuất của bạn)? –
Tôi đã cập nhật câu trả lời của mình với một số ví dụ, bạn cũng có thể sử dụng cài đặt cấu hình trong tệp beans.xml của mình nếu cần. – seanhodges
+1 Cảm ơn! Ví dụ rất hay. –