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

Chúng tôi rất vui mừng chia sẻ kiến thức về từ khóa Bean la gi và hi vọng rằng nó sẽ hữu ích cho các bạn đọc. Bài viết tập trung trình bày ý nghĩa, vai trò và ứng dụng của từ khóa trong việc tối ưu hóa nội dung trang web và chiến dịch tiếp thị trực tuyến. Chúng tôi cung cấp các phương pháp tìm kiếm, phân tích và chọn lọc từ khóa phù hợp, kèm theo các chiến lược và công cụ hữu ích. Hi vọng rằng thông tin chúng tôi chia sẻ sẽ giúp bạn xây dựng chiến lược thành công và thu hút lưu lượng người dùng. Cảm ơn sự quan tâm và hãy tiếp tục theo dõi blog của chúng tôi để cập nhật kiến thức mới nhất.

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

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

spring-overview.png

Trong phần này, tất cả chúng ta sẽ tuần tự nói về Spring Beans, Spring Annotations.

Spring Beans

21. Spring beans là gì?

Spring Beans đây chính là những Java Object mà từ đó tạo nên sườn sườn của một Spring application.Chúng được tùy chỉnh thiết lập, lắp ráp và quản lý bởi Spring IoC container. Những bean này được tạo ra bởi configuration metadata được cung cấp từ container, ví dụ, trong tag nằm trong file XML.

Các bean được define trong spring framework 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ị là true thì bean này sẽ trở thành singleton, nếu là false thì bean này sẽ trở thành prototype bean. Mặc định nếu không được khái niệm giá trị của nó sẽ là true. Vì thế tất cả những bean trong spring framework mặc định sẽ là singleton bean.

22. Khái niệm Spring bean gồm những gì?

Một Spring bean definition chứa tất cả những configuration metadata cái mà cần cung cấp cho container biết làm thế nào để tạo ra bean, cũng như cụ thể chi tiết về lifecycle và những depedencies của nó.

23. Làm thế nào để cung cấp configuration metadata cho Spring Container?

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

  • Thông qua XML configuration file
  • Thông qua Annotation-based configuration
  • Thông qua Java-based configuration

24. Làm thế nào để khái niệm scope của bean?

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

25. Các scope của bean

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

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

Xem Thêm : Employer Branding là gì? Cách xây dựng thương hiệu tuyển dụng?

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

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

Không, trong Spring framework, singleton bean không thread safe.

27. Bean lifecycle trong Spring framework

  • Spring container tìm các bean definition trong file XML và khởi tạo các bean.
  • Spring tùy chỉnh thiết lập tất cả những tính chất được khái niệm 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 sẽ truyền beanfactory vào hàm setBeanFactory().
  • Nếu có bất kể bean BeanPostProcessors nào được liên kết với bean đang khởi tạo, spring sẽ gọi hàm postProcesserBeforeInitialization() postProcessAfterInitialization().
  • Nếu bean implement InitializingBean, phương thức afterPropertySet() sẽ tiến hành gọi. Nếu bean đã được khai báo phương thức khởi tạo, thì phương thức này sẽ được gọi.
  • Nếu bean implement DisposableBean interface, phương thức destroy() sẽ tiến hành gọi.

28. Phương thức nào là quan trọng nhất trong Spring Bean lifecycle

Có hai phương thức quan trọng nhất trong Spring bean lifecycle. Trước nhất đó 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 tính chất quan trọng là init-methoddestroy-method với tính chất này, tất cả chúng ta có thể khai báo tùy biến phương thức khởi tạo và destroy cho từng bean. Ngoài ra nếu như khách hàng sử dụng Annotation-based thì Spring framework cũng cung cấp hai annotation là @PostConstruct và @PreDestroy

29. Inner bean trong Spring

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

30. Làm thế nào để inject Java Collection trong Spring?

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

  • dùng làm inject list, có thể có những thành phần trùng nhau.
  • dùng làm inject set, các thành phần không trùng nhau.
  • dùng làm inject collection dạng key-value, trong đó key và value là loại tùy ý.
  • dùng làm inject collection dạng key-value, trong đó key và value đều là String.

31. Bean wiring là gì?

Wiring, hoặc là Bean wiring là trường hợp mà các bean được phối hợp lại trong Spring container. Khi wiring bean, Spring container nên tìm hiểu những 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ì?

Spring container có khả năng autowire quan hệ giữa các bean có quan hệ hợp tác với nhau. Spring sẽ xử lý các quan hệ hợp tác bằng phương pháp xem xét nội dụng của BeanFactory với những 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 thế nào autowiring xử lý dependency injection.

  • no: đây là default setting, bean tham chiếu sẽ tiến hành reference rõ ràng khi khai báo.
  • byName: khi autowiring byName, Spring container sẽ nỗ lực 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 sẽ nỗ lực match chuẩn xác với tên của bean trong configuration file. Nếu có nhiều hơn một, fatal exception sẽ tiến hành throw ra.
  • constructor: mode này tương tự với byType, nhưng type sẽ apply lên các constructor argument. Nếu không có kết quả nào phù hợp, thì fata exception cũng được throw ra.
  • autodetect: Spring sẽ nỗ lực wire bằng phương pháp sử dụng constructor, nếu không có nó sẽ fallback xuống sử dụng byType.

34. Hạn chế của autowiring

Các hạn chế của việc autowiring:

  • Overriding: vẫn có thể khái niệm các dependencies bằng và việc này sẽ xoành xoạch override autowiring.
  • Data types: Không thể autowire những tính chất đơn giản như primitive, String và Classes.
  • Confusing: autowiring thì không tường minh, vì thế sử dụng khai báo tường minh có thể là cách khôn ngoan hơn.

Xem Thêm : Mục tiêu SMART (SMART Goals) là gì?

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

Có thể.

Spring Annotations

36. Java-based configuration

Java-based configuration được cho phép tất cả chúng ta viết Spring configuration mà không cần sử dụng XML, thay vào đó tất cả chúng ta sử dụng các Java-based annotation. Về Annotation trong Java các bạn cũng có thể tìm đọc nội dung 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à tất cả chúng ta cung cấp 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 phương pháp sử dụng annotation trong class, method hay field của chính class đó.

38. Làm thế nào tùy chỉnh thiết lập autowiring?

Mặc định Spring container sẽ không còn enable annotation wiring. Để sử dụng annotation-based wiring tất cả chúng ta phải enable nó trong Spring configuration bằng tag .

39. @Required annotation

Annotation này đơn giản chỉ ra rằng tính chất nào của bean phải được tùy chỉnh thiết lập tại thời khắc config, thông qua khai báo tường minh hay thông qua autowiring. Nếu những tính chất của bean không thể được tùy chỉnh thiết lập thì container sẽ throw BeanInitializationException.

40. @Autowired annotation

@Autowired annotation cung cấp phương thức wiring cũng như làm 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 sẽ tiến hành sử dụng với @Autowired để giảm thiểu sự nhầm lẫn bằng phương pháp định danh chuẩn xác bean nào được wire.

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

Xin chào và hứa hội ngộ.

You May Also Like

About the Author: v1000