Các chú thích có công dụng của chúng, nhưng chúng không phải là viên đạn bạc để giết cấu hình XML. Tôi khuyên bạn nên trộn hai!
Chẳng hạn, nếu sử dụng Spring, việc sử dụng XML cho phần tiêm phụ thuộc trong ứng dụng của bạn là hoàn toàn trực quan. Điều này làm cho các phụ thuộc của mã ra khỏi mã sẽ sử dụng nó, ngược lại, sử dụng một số loại chú thích trong mã cần các phụ thuộc làm cho mã nhận biết về cấu hình tự động này.
Tuy nhiên, thay vì sử dụng XML để quản lý giao dịch, việc đánh dấu một phương thức là giao dịch bằng chú thích có ý nghĩa hoàn hảo, vì đây là thông tin mà một lập trình viên có thể muốn biết. Nhưng một giao diện sẽ được đưa vào dưới dạng SubtypeY thay vì SubtypeX không nên được đưa vào lớp, bởi vì nếu bây giờ bạn muốn tiêm SubtypeX, bạn phải thay đổi mã của mình, trong khi bạn đã có hợp đồng giao diện trước mọi cách, vì vậy với XML, bạn chỉ cần thay đổi ánh xạ XML và việc này khá nhanh chóng và không gây đau đớn.
Tôi chưa sử dụng các chú thích JPA, vì vậy tôi không biết chúng tốt như thế nào, nhưng tôi sẽ lập luận rằng việc để ánh xạ của các hạt đậu vào cơ sở dữ liệu trong XML cũng tốt, vì đối tượng không quan tâm đến thông tin của nó đến từ đâu , nó chỉ nên quan tâm những gì nó có thể làm với thông tin của nó. Nhưng nếu bạn thích JPA (tôi không có bất kỳ kinh nghiệm nào với nó), bằng mọi cách, hãy dùng nó.
Nói chung: Nếu một chú thích cung cấp chức năng và hoạt động như một nhận xét trong chính nó và không buộc mã xuống một số quy trình cụ thể để hoạt động bình thường mà không có chú thích này, thì hãy đi chú thích. Ví dụ, một phương thức giao dịch được đánh dấu là giao dịch không giết chết logic vận hành của nó và cũng đóng vai trò là một nhận xét cấp mã tốt. Mặt khác, thông tin này có thể được biểu thị tốt nhất dưới dạng XML, vì mặc dù cuối cùng nó sẽ ảnh hưởng đến cách mã hoạt động, nhưng nó sẽ không thay đổi chức năng chính của mã và do đó không thuộc về các tệp nguồn.
@Component
và@Autowired
, đây là một sự phân đôi giả. Có nhiều cách khác để tạo cấu hình của bạn, bao gồm JavaConfig và Groovy config.