Tôi đã chú thích các lớp của mình bằng chú thích @Repository, @Resource, @Component, @Service nhưng các lớp này phải chạy trong 2 môi trường. Môi trường đầu tiên là Spring 2.x trong khi môi trường khác không có mùa xuân chút nào. Tôi chắc chắn rằng mã sẽ không thành công nếu không có các jars xuân & Tôi muốn biết các ý tưởng của bạn về cách tôi có thể giữ lại các chú thích nhưng vẫn hoạt động trong cả hai môi trườngPhụ thuộc vào chú thích của mùa xuân
Trả lời
Vì bạn không thể xóa bài được chấp nhận, tôi đề nghị bạn đọc bài/bỏ phiếu Hans', mà là một lời giải thích tốt hơn nhiều so với bản gốc của tôi: Dependency on Spring's annotations
Khi sử dụng các chú thích định kiến (@Service vv), sự cân bằng để đạt được xác nhận hợp lệ thời gian biên dịch là bạn trở nên kết hợp với thư viện bối cảnh mùa xuân trong mã của bạn. Tôi thấy 3 tùy chọn ngay lập tức:
1) Xóa chú thích và định cấu hình hạt của bạn trong XML.
2) Sao chép spring-context.jar (hoặc thư viện tương đương giữ chú thích khuôn mẫu của bạn) vào dự án không phải Spring của bạn để giải quyết các phụ thuộc, nhưng để Spring không được định cấu hình để nó không được sử dụng trong mã của bạn.
3) Xóa chú thích khỏi các lớp cụ thể của bạn và mở rộng chúng bằng các phiên bản "Spring". Cách tiếp cận này có thể hoặc không thể là một ít xâm lấn để thiết kế của bạn, nhưng đáng xem xét:
public class MyDAO {
protected SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
// .. Your DAO code resides here ..
}
Và mùa xuân sub-class:
@Repository
public class MySpringDAO extends MyDAO {
@AutoWired
protected SessionFactory sessionFactory;
}
Bằng cách này, dự án phi mùa xuân của bạn có thể sử dụng " MyDAO "và loại trừ lớp" MySpringDAO "khỏi bản dựng.
Đối với mọi chú thích trong Java, có một tệp lớp tương ứng. Nếu bạn tìm ra chú thích nào bạn sử dụng, bạn có thể sao chép tệp lớp học sang môi trường khác.
Tôi không chắc chắn liệu các lớp này có phụ thuộc vào các lớp khác aswel hay không; chúng có thể không, vì chú thích là các đối tượng chỉ có dữ liệu không thay đổi. Nếu lớp này cũng có các phương thức, bạn có thể biên dịch lại (với cùng một ID tuần tự hóa) các nguồn chú thích mà không có các phương thức (tức là chỉ các trường) để sử dụng trong môi trường khác.
Để có thể sử dụng chú thích mà bạn đề cập hoặc thực sự, hãy để Spring sử dụng chúng để bạn có được lợi ích, bạn cần sử dụng ít nhất là Spring 2.5.x, đó là khi chúng được giới thiệu.
Hơn nữa, chú thích không bắt buộc phải nằm trên đường dẫn lớp. Họ sẽ bị bỏ qua. Vì khi bạn đang sử dụng spring 2.0, sẽ không có mã nào cố gắng 'quét' cho chúng.
Bạn vẫn có phụ thuộc thời gian biên dịch trên các chú thích đó. Và vì các tệp .class của bạn có các chú thích được biên dịch trong tôi giả định rằng bạn sẽ cần các tệp .class của chú thích cũng như trên đường dẫn lớp của bạn. Đó không phải là trường hợp? –
Nope :) để xác minh nó tôi vừa thử nghiệm. Tôi tạo ra một dự án nhỏ, với một chính(). Lớp được chú thích bằng MyAnnotation mà tôi đã viết. Tôi đã chạy nó trên dòng lệnh, sau đó xóa thủ công tệp .class cho chú thích và chạy lại nó. Nó vẫn hoạt động. Hãy thử nó cho mình :) Tâm trí bạn chú thích của tôi đã được chú thích nó tự với @Retention (RetentionPolicy.RUNTIME) –
Rất tốt để biết thực sự ... –
Nó sẽ không là mùa xuân nếu nó buộc bạn phải làm cho các lớp học của bạn trực tiếp phụ thuộc vào nó.
Bạn có thể xác định các chú thích của riêng bạn phục vụ cùng mục đích với các mục được xác minh mùa xuân. I E. xác định com.yourcompany .... Thành phần, v.v.
Tôi giả định rằng bạn sử dụng một số <context:component-scan .../>
ở đâu đó trong cấu hình mùa xuân của mình. Chỉ cần thêm use-default-filters="false"
và xác định bộ lọc của riêng bạn để khớp với chú thích của bạn.
Tìm những người hậu xử lý thực sự thực hiện công việc grunt.Chúng có thể được định cấu hình để sử dụng một bộ chú thích thay thế. @Repository
được kiểm tra bởi PersistenceExceptionTranslationPostProcessor
. PostProcessor này có thể được cấu hình để sử dụng tương đương với chú thích.
- 1. Phụ thuộc mùa xuân Tiêm một chú thích Aspect
- 2. Chú thích @Transactional mùa xuân
- 3. Mùa xuân - Tiêm phụ thuộc vào ServletContextListener
- 4. Nhiều chú thích @RequestMapping Mùa xuân
- 5. mùa xuân lời khuyên chú thích để
- 6. Lô mùa xuân với chú thích
- 7. Mùa xuân 3.2 AOP - Phương pháp chặn bằng chú thích
- 8. Số nguyên xác nhận chú thích mùa xuân mvc
- 9. Cách mở rộng chú thích mùa xuân @Transactional
- 10. mùa xuân, làm việc với @Configuration và chú thích @Bean
- 11. Mùa xuân: Trình quản lý giao dịch theo chú thích
- 12. Xác nhận MVC mùa xuân với chú thích
- 13. Chú thích mùa xuân @Inject không hoạt động
- 14. mùa xuân, lớp trừu tượng và chú thích
- 15. Sử dụng các biến tĩnh trong chú thích mùa xuân
- 16. Tạo hạt đậu mùa xuân nguyên mẫu với chú thích?
- 17. Chú thích @Valid chỉ ra trong Mùa xuân là gì?
- 18. Giá trị chú thích Phạm vi mùa xuân
- 19. tiêm phụ thuộc vào mùa xuân @Autowired mà không cần setter
- 20. Sự khác nhau giữa phụ thuộc vào bối cảnh mùa xuân và lõi-xuân là gì?
- 21. Xuân Util: Thuộc tính tiêm qua chú thích vào một bean
- 22. Chú thích tùy chỉnh mùa xuân: cách kế thừa các thuộc tính?
- 23. Chuyển thuộc tính maven vào mùa xuân
- 24. Tiêm phụ thuộc vào mùa xuân: Tiêm tất cả các trường hợp của giao diện
- 25. Làm cách nào để đặt cấu hình hoạt động thông qua chú thích vào mùa xuân?
- 26. tiêm phụ thuộc mùa xuân, để sử dụng @Named hoặc @Resource?
- 27. Tiêm phụ thuộc vào mùa xuân trong lớp siêu trừu tượng
- 28. AspectJ vào mùa xuân
- 29. JPA dữ liệu mùa xuân giống như dự án không phụ thuộc vào Spring
- 30. Xác nhận chú thích mùa xuân - Kiểm tra duy nhất trên bản cập nhật vs thêm
Tôi đã chọn số 2 và hoạt động tốt. –
Cảm ơn bạn Sean, đó là duyên dáng của bạn. –