2015-03-16 15 views
8

Tôi đang nghiên cứu chứng nhận Spring Core và, về các công cụ nghiên cứu được cung cấp, tôi có câu hỏi này nhưng tôi không thể đưa ra câu trả lời cho nó.Tại sao tôi phải có một hàm tạo mặc định trong lớp cấu hình Spring được chú thích bởi chú thích @Constructor?

Tại sao bạn phải có một hàm tạo mặc định trong lớp @Configuration được chú thích của bạn?

Tôi không tuyên bố bất kỳ nhà xây dựng vào các lớp cấu hình của tôi annoted bởi @Configuration chú thích. Hàm khởi tạo mặc định là hàm tạo kế thừa của lớp siêu? hay cái gì? Tại sao tôi phải có một hàm tạo mặc định và tôi không thể ghi đè nó?

Tnx

+1

Đoán điều đó có nghĩa là bạn cần một hàm tạo không có tham số. Vì vậy, bạn có thể ghi đè lên constructor nhưng nó cần một constructor không có tham số để tạo Configuration. – StanislavL

+0

@StanislavL ok nhưng tại sao? –

Trả lời

18

Theo official spring javadoc, mùa xuân @Configuration lớp chú thích được yêu cầu phải có mặc định không-arg constructor

@Configuration lớp phải có một default/không-arg constructor và không thể sử dụng @ Tham số hàm tạo tự động. Bất kỳ lớp cấu hình lồng nhau phải tĩnh

Lý do là mùa xuân có sử dụng CGLIB to proxy @Configuration lớp học và có giới hạn trong mùa xuân, that classes proxied with CGLIB prior to version 4 are required to have default no-args constructor.

Trước mùa xuân 4, các lớp proxy dựa trên CGLIB yêu cầu hàm tạo mặc định. Và đây không phải là giới hạn của thư viện CGLIB, nhưng bản thân Spring. May mắn thay, tính đến mùa xuân 4 điều này không còn là vấn đề nữa. Các lớp proxy dựa trên CGLIB không còn đòi hỏi một hàm tạo mặc định nữa.

+0

Tôi đã đọc tài liệu nhưng nó chỉ nói rằng lớp có chú thích với @Configuration yêu cầu một constructor no-arg mặc định nhưng không giải thích tại sao –

+2

Cập nhật câu trả lời của tôi cũng bao gồm cả lý do. –

+0

Ok, tnx rất nhiều –

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