2009-12-22 42 views
9

Công cụ chú thích @SpringBean của Wicket hoạt động như thế nào? Liệu nó có sử dụng sự phản chiếu trong thời gian chạy không? Liệu nó làm cho trình biên dịch tiêm một số mã? Hay cái gì?Chú thích @SpringBean của Wicket hoạt động như thế nào?

+1

Không có chú thích '@ SpringBean' trong API Spring. Có một trong Wicket, mặc dù, là những gì bạn đang sử dụng? – skaffman

+1

Ah, tôi không biết điều đó - vâng tôi đang sử dụng Wicket. Tôi sẽ thay đổi câu hỏi và thẻ để phản ánh điều đó. Cảm ơn. – Tarquila

+0

@Tarquila - Tôi nghĩ rằng sẽ dễ dàng hơn khi sửa câu hỏi này cho mùa xuân. Và thêm một cái mới cho Wicket. –

Trả lời

0

Mùa xuân sử dụng trình tải lớp và ASM khi chạy để tìm tất cả các lớp được chú thích.

Bạn có thể configure nơi mùa xuân nên tìm kiếm cho đậu:

<context:component-scan base-package="some.package.to.start.from"/> 

này sử dụng ClassPathBeanDefinitionScanner nội bộ mà sẽ sử dụng PathMatchingResourcePatternResolver để tìm các lớp học và ASM-based MetadataReader để đọc các chú thích.

+5

Cơ chế này không liên quan gì đến '@ SpringBean', đó là cấu trúc Wicket, không phải là cấu trúc Spring. – skaffman

+0

Tôi chưa từng sử dụng Wicket. Tôi nghĩ anh ấy có nghĩa là chú thích @Component etc. Tốt để biết. –

25

@SpringBean hoạt động bằng Wicket's underlying Injector mechanism. Khi bạn khởi tạo một thành phần Wicket, hàm tạo của lớp cơ sở thành phần của Wicket nhìn vào lớp đang được khởi tạo, tìm kiếm chú thích @SpringBean. Nếu đậu được tìm thấy, sau đó Wicket tạo ra một proxy cho đậu mùa xuân và tiêm nó vào trường của thành phần. Đây là tương đương Wicket tương đương với chú thích @Autowired của Spring, hiệu ứng cũng tương tự.

Tuy nhiên, nó không có liên quan gì đến chức năng quét ngữ cảnh/lớp học của Spring (ví dụ: @Component), về tự động khám phá những gì và không phải là bean, hệ thống dây điện.

+3

Để sử dụng, chỉ cần thêm trình nghe SpringComponentInjector vào ứng dụng Wicket để nghe các thành phần instantiations. – Matt

4

Lớp đánh dấu bằng một chú thích @SpringBean phải có một trong số:

  1. Một constructor không args
  2. Một lớp cha với một constructor không có args
  3. Thực hiện một giao diện

Một ngoại lệ sẽ bị ném nếu các điều kiện này không được đáp ứng vì Wicket sẽ không thể ủy quyền lớp học.

+0

đây là thông tin hữu ích nhưng không thực sự là câu trả lời cho câu hỏi. nó có thể là tốt hơn như một bình luận các câu hỏi hoặc câu trả lời khác. –

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