Hỏi đáp

69 câu hỏi phỏng vấn về Spring (Phần 2)

Trong bài trước đã có bạn hỏi về cấu trúc các module trong Spring, đây chính là hình minh họa.

spring-overview.png

Bạn đang xem: Spring bean chính là gì

Trong phần này, chúng ta cũng sẽ lần lượt nói về Spring Beans, Spring Annotations.

Bạn đang đọc: 69 câu hỏi phỏng vấn về Spring (Phần 2)

Spring Beans

21. Spring beans là gì vậy?

Spring Beans là các Java Object mà từ đó tạo nên khung sườn của một Spring sentayho.com.vnúng được cài đặt, lắp ráp , quản lý bởi Spring IoC container. các bean này đã được tạo ra bởi configuration metadata đã được cung cấp đến từ container, thí dụ, trong tag nằm trong file XML.

Các bean đã được define trong spring framework chính là singleton bean. Có một thuộc trính trong bean với tên là “singleton” nếu đã được gán giá trị chính là true thì bean đó sẽ trở thành singleton, nếu chính là false thì bean đó cũng sẽ trở thành prototype bean. Mặc định nếu không đã được định nghĩa giá trị của nó sẽ là true. Vì thế tất cả các bean trong spring framework mặc định cũng sẽ là singleton bean.

Tìm hiểu thêm: &quotCarry Out&quot nghĩa là gì: Định Nghĩa, thí dụ trong Tiếng Anh

22. Định nghĩa Spring bean gồm các gì?

Một Spring bean definition chứa tất cả các configuration metadata cái mà cần cung cấp cho container biết thực hiện sao để gây nên bean, cũng như chi tiết về lifecycle và các depedencies của nó.

23. Làm sao để cung ứng configuration metadata cho Spring Container?

Có ba cách để cũng cấp configuration metadata cho Spring container.

Thông qua XML configuration fileThông qua Annotation-based configurationThông qua Java-based configuration

24. Làm sao để định nghĩa scope của bean?

Khi định nghĩa một bean trong Spring, mọi người còn phải định nghĩa scope của bean. Việc định nghĩa scope có thể thực hiện thông qua việc sử dụng thuộc tính tên chính là “scope” khi định nghĩa. Lấy thí dụ, khi bean phải tạo mới mỗi lần cần sử dụng, thuộc tính scope sẽ chính là “prototype”. Mặt khác, khi bean luôn luôn trả về một instance giống nhau khi sử dụng, thuộc tính scope cũng sẽ chính là “singleton”.

25. các scope của bean

Spring framework đưa ra năm scope của bean như sau:

singleton: cho biết bean đó có một instance duy nhất trong Sping IoC container.prototype: cho biết bean đó được định nghĩa chính là có nhiều object instances, mỗi lần muốn sử dụng cũng sẽ tạo mới.request: cho biết bean được định nghĩa với một HTTP request. Scope này chỉ hợp lệ khi chúng ta sử dụng Web Application Context.session: cho biết bean được định nghĩa với một HTTP session. Scope này cũng chỉ hợp lệ khi chúng ta sử dụng Web Application Context.global-session: cho biết bean đã được định nghĩa với một global HTTP session. Scope này cũng chỉ hợp lệ khi chúng ta sử dụng Web Application Context.

Scope mặc định của mọi Spring Bean là singleton.

26. Singleton Bean có Thread safe trong Spring Framework?

Xem thêm: TTR chính là gì vậy? Thuật ngữ TTR , TT trong thanh toán quốc tế

Không, trong Spring framework, singleton bean chưa thread safe.

27. Bean lifecycle trong Spring framework

Spring container tìm các bean definition trong file XML , khởi tạo các bean.Spring cài đặt tất cả các thuộc tính đã được định nghĩa trong bean definition (Dependency Injection).Nếu bean implement BeanNameAware interface, spring sẽ truyền bean id vào trong hàm setBeanName().Nếu bean implement BeanFactoryAware interface, spring cũng sẽ truyền beanfactory vào hàm setBeanFactory().Nếu có bất cứ bean BeanPostProcessors nào được liên kết với bean đang khởi tạo, spring cũng sẽ gọi hàm postProcesserBeforeInitialization() postProcessAfterInitialization().Nếu bean implement InitializingBean, phương thức afterPropertySet() sẽ đã được gọi. Nếu bean được khai báo phương thức khởi tạo, thì phương thức đó sẽ đã được gọi.Nếu bean implement DisposableBean interface, phương thức destroy() sẽ được gọi.

28. Phương thức nào là quan trọng số 1 trong Spring Bean lifecycle

Có hai phương thức quan trọng số 1 trong Spring bean lifecycle. Đầu tiên đó chính là setup(), phương thức nay đã được gọi khi bean được load vào container. Phương thức thứ hai đó là teardown(), phương thức này đã được gọi khi bean đã được unload khỏi container.

Tag có hai thuộc tính quan trọng chính là init-method , destroy-method với thuộc tính này, chúng ta có thể khai báo tùy biến phương thức khởi tạo và destroy cho mỗi bean. Ngoài ra nếu bạn sử dụng Annotation-based thì Spring framework cũng cung ứng hai annotation chính là @PostConstruct , @PreDestroy

29. Inner bean trong Spring

Khi mà bean chỉ đã được sử dụng như một thuộc tính của một bean khác thì nó được gọi chính là inner bean. XML-based configuration metadata cung ứng cho mọi người sử dụng tag bên trong tag hoặc để khai báo gọi inner bean. Inner bean luôn luôn là anonymous , scope của chúng luôn là prototype.

30. Làm sao để inject Java Collection trong Spring?

Spring đưa ra cho chúng ta các loại collection như sau:

dùng để inject list, có thể có các phần tử trùng nhau. dùng để inject set, các phần tử chưa trùng nhau. dùng để inject collection dạng key-value, trong đó key , value là các loại tùy ý. dùng để inject collection dạng key-value, trong đó key và value đều là String.

31. Bean wiring là gì vậy?

Wiring, hoặc là Bean wiring chính là trường hợp mà các bean được kết hợp lại trong Spring container. Khi wiring bean, Spring container cần biết các bean nào cần , và làm thế nào để container sử dụng dependency injection nối tất cả chúng lại với nhau.

32. Bean auto wiring là gì vậy?

Spring container có khả năng autowire quan hệ giữa các bean có mối quan hệ hợp tác với nhau. Spring cũng sẽ giải quyết các mối quan hệ hợp tác bằng cách xem xét nội dụng của BeanFactory với các tag , và .

33. Các mode auto wiring

Autowiring có năm mode được sử dụng để hướng dẫn Spring container làm sao autowiring giải quyết dependency injection.

no: đây chính là default setting, bean tham chiếu cũng sẽ đã được reference rõ ràng khi khai báo.byName: khi autowiring byName, Spring container cũng sẽ cố gắng match giá trị đã được khai báo trong bean với tên tương tự trong configuration file.byType: khi autowiring bằng data type, Spring container cũng sẽ cố gắng match chính xác với tên của bean trong configuration file. Nếu có nhiều hơn một, fatal exception sẽ được throw ra.constructor: mode này tương tự với byType, nhưng type cũng sẽ apply lên các constructor argument. Nếu chưa có kết quả nào phù hợp, thì fata exception cũng được throw ra.autodetect: Spring sẽ cố gắng wire bằng cách sử dụng constructor, nếu chưa có nó sẽ fallback xuống sử dụng byType.

34. Hạn chế của autowiring

Các tránh của việc autowiring:

Overriding: vẫn có thể định nghĩa các dependencies chỉ bằng và việc này cũng sẽ luôn luôn override autowiring.Data types: Không thể autowire các thuộc tính đơn giản như primitive, String , Classes.Confusing: autowiring thì chưa tường minh, vì thế sử dụng khai báo tường minh có thể chính là cách khôn ngoan hơn.

35. Có thể inject null hoặc empty String trong Spring hay không?

Tham khảo thêm: Chạy việt dã chính là gì vậy? Chạy Trail chính là gì vậy? Chạy Marathon chính là gì vậy?

Có thể.

Spring Annotations

36. Java-based configuration

Java-based configuration cho phép mọi người viết Spring configuration mà chưa cần sử dụng XML, thay vào đó mọi người sử dụng các Java-based annotation. Về Annotation trong Java Bạn có thể tìm đọc bài viết của tôi trong bài Hướng dẫn sử dụng Annotations.

37. Annotation-based configuration

Một phương thức thay thế cho việc setup application bằng XML là chúng ta cung ứng các annotation-based configuration dựa trên bytecode metadata cho việc wiring các component. Thay vì sử dụng XML để mô tả một bean, lập trình viên chuyển các configuration vào trong component class bằng cách sử dụng annotation trong class, method hay field của chính class đó.

38. Làm sao cài đặt autowiring?

Mặc định Spring container sẽ chưa enable annotation wiring. Để sử dụng annotation-based wiring mọi người phải enable nó trong Spring configuration bằng tag .

39. @Required annotation

Annotation này đơn giản chỉ ra rằng thuộc tính nào của bean phải đã được cài đặt tại thời điểm config, thông qua khai báo tường minh hay thông qua autowiring. Nếu các thuộc tính của bean không thể được cài đặt thì container sẽ throw BeanInitializationException.

40. @Autowired annotation

@Autowired annotation cung cấp phương thức wiring cũng như thực hiện thế nào autowiring được hoàn thành. Nó có thể sử dụng autowire bean trong setter method như @Required annotation, trong constructor, trong property hoặc trong method nào đói với một hoặc nhiều argument.

41. @Qualifier annotation

Khi có nhiều hơn một bean với cùng một loại , và chỉ có một bean trong số đó cần đã được wire với một property nào đó, @Qualifier cũng sẽ được sử dụng với @Autowired để giảm thiểu sự nhầm lẫn chỉ bằng cách định danh chính xác bean nào được wire.

Trong bài cuối cùng chúng ta cũng sẽ tiếp tục nói về Spring Data Access, Aspect Oriented Programming (AOP), Spring MVC.

Xin chào , và hẹn gặp lại.

Xem thêm: Tòa thị chính là gì vậy? Chi tiết về Tòa thị chính mới nhất 2022

Bạn thấy bài viết thế nào?

Tìm hiểu thêm: Kinh tế quốc tế là gì vậy?