Bean autowiring trong Spring là gì? – Hướng Dẫn Java

Bản chất của Spring là tạo ra những đối tượng người tiêu dùng trong container của nó để khi những bạn cần thì hoàn toàn có thể gọi đến đối tượng người tiêu dùng bạn cần. Vì thế, Spring tìm mọi cách để tương hỗ tất cả chúng ta hoàn toàn có thể tạo ra đối tượng người dùng trong khung chứa của nó một cách thuận tiện nhất .

Chúng ta đã biết cách khai báo để đưa đối tượng này vào đối tượng khác, hay có thể nói là đưa đối tượng phụ thuộc vào đối tượng bị phụ thuộc, bằng cách sử dụng thuộc tính ref, list … Ngoài ra, Spring còn hỗ trợ chúng ta đưa đối tượng phụ thuộc vào đối tượng bị phụ thuộc một cách tự động bằng cách sử dụng Bean Autowiring của nó.

Với Bean Autowiring, chúng ta ko cần phải sử dụng các thuộc tính ref hay list, mà chỉ cần viết code tuân thủ theo quy tắc của Spring thì đối tượng phụ thuộc sẽ tự động được đưa vào đối tượng bị phụ thuộc.

Có ba cách để sử dụng Bean Autowiring, đó là :

  • byName
  • byType
  • constructor

Để những bạn hoàn toàn có thể hiểu rõ hơn, mình sẽ làm một ví dụ nhé ! Trong ví dụ này mình sẽ nhu yếu Spring tự động hóa đưa đối tượng người tiêu dùng Table vào đối tượng người tiêu dùng Room của mình. Cụ thể như sau :

Bean autowiring trong Spring là gì?

Mình sẽ sử dụng Java 17 cho ứng dụng ví dụ này :

1234

17

17

Spring dependency như sau :

12345

org. springframework

spring-context

6.0.2

Class Room :

123456789101112131415161718192021

packagecom.huongdanjava.springbeanautowiring;

publicclassRoom{

privateTabletable;

publicRoom(){}

publicRoom(Tabletable){

this.table=table;

}

publicTablegetTable(){

returntable;

}

publicvoidsetTable(Tabletable){

    

this

.

table

=

table

;

  

}

}

Class Table :

12345678910111213141516

package

com

.

huongdanjava

.

springbeanautowiring

;

public

class

Table

{

  

private

String

code

;

  

public

void

setCode

(

String

code

)

{

    

this

.

code

=

code

;

  

}

  

@Override

  

public

String

toString

(

)

{

    

return

“Table [code=”

+

code

+

“]”

;

  

}

}

Class Application :

1234567891011121314151617

package

com

.

huongdanjava

.

springbeanautowiring

;

import

org

.

springframework

.

context

.

ApplicationContext

;

import

org

.

springframework

.

context

.

support

.

ClassPathXmlApplicationContext

;

public

class

Application

{

  

public

static

void

main

(

String

[

]

args

)

{

    

ApplicationContext

context

=

new

ClassPathXmlApplicationContext

(

“spring.xml”

)

;

    

Room

room

=

(

Room

)

context

.

getBean

(

“room”

)

;

    

if

(

room

.

getTable

(

)

!

=

null

)

{

      

System

.

out

.

println

(

room

.

getTable

(

)

.

toString

(

)

)

;

    

}

  

}

}

Và khai báo đối tượng người tiêu dùng Table và Room trong tập tin thông số kỹ thuật của Spring :

123456789101112

xmlns

=

“http://www.springframework.org/schema/beans”

  

xmlns

:

xsi

=

“http://www.w3.org/2001/XMLSchema-instance”

  

xsi

:

schemaLocation

=

“http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd”

>

 

  

id

=

“table”

class

=

“com.huongdanjava.springbeanautowiring.Table”

>

    

name

=

“code”

value

=

“123456”

/>

  

  

id

=

“room”

class

=

“com.huongdanjava.springbeanautowiring.Room”

>

  

OK, giờ mình sẽ đi lần lượt từng cách một và nói cho các bạn biết cụ thể về nó nhé!

byName

Như các bạn đã biết, mỗi bean trong Spring container đều có 1 id của riêng nó. Dựa vào điều này, Spring quy định nếu id của đối tượng phụ thuộc (trong ví dụ của mình là đối tượng Table) giống với tên một biến nào đó trong đối tượng bị phụ thuộc (đối tượng Room) và khi khai báo đối tượng bị phụ thuộc, chúng ta khai báo thêm thuộc tính autowire=”byName” thì Spring sẽ tự động đưa đối tượng phụ thuộc vào đối tượng bị phụ thuộc qua phương thức setter của đối tượng bị phụ thuộc.

Trong ví dụ của mình, id của đối tượng Table đã hoàn toàn giống với tên biến table trong đối tượng Room, do đó chúng ta chỉ cần khai báo thêm cho bean room thuộc tính autowire=”byName” thì Spring sẽ tự động đưa đối tượng Table vào đối tượng Room cho chúng ta.

Cấu hình của đối tượng người dùng Room sẽ sửa lại như sau :

12

id=” room “class=” com.huongdanjava. springbeanautowiring. Room “autowire=” byName “>

Khi chạy, chương trình sẽ cho ra hiệu quả như sau :

Bean autowiring trong Spring là gì?

Cách này có bất lợi ở chỗ nếu sau này chúng ta thay đổi tên biến của đối tượng bị phụ thuộc, lại phải đi đổi lại tên id của đối tượng phụ thuộc trong khung chứa của Spring và ngược lại. Các bạn hình dung được chứ nhỉ?

byType

Cách này tất cả chúng ta chỉ vận dụng được với những project nhỏ khi mà mỗi đối tượng người tiêu dùng chỉ có một bean duy nhất trong khung chứa của Spring. Khi đó bằng cách đổi khác thuộc tính autowire = ” byType ” khi khai báo một bean, Spring sẽ tự động hóa đưa đối tượng người dùng phụ thuộc vào vào đối tượng người dùng bị nhờ vào cũng qua phương pháp setter của đối tượng người tiêu dùng bị phụ thuộc vào .

12

id=” room “class=” com.huongdanjava. springbeanautowiring. Room “autowire=” byType “>

Kết quả :

Bean autowiring trong Spring là gì?

Nếu những bạn cố ý khai báo thêm một bean khác của đối tượng người dùng nhờ vào như sau :

12345678910

id=” table “class=” com.huongdanjava. springbeanautowiring. Table “>

name=” code “value=” 123456 “/ >

id=” table1 “class=” com.huongdanjava. springbeanautowiring. Table “>

name=” code “value=” 123456 “/ >

id=” room “class=” com.huongdanjava. springbeanautowiring. Room “autowire=” byType “>

Thì khi chạy sẽ gặp lỗi :

Bean autowiring trong Spring là gì?

constructor

Giống như thuộc tính autowire=”byType”, cách này chúng ta cũng chỉ áp dụng khi đối tượng của chúng ta chỉ có một bean duy nhất trong khung chứa của Spring. Khi đó, Spring sẽ tự động đưa đối tượng phụ thuộc vào đối tượng bị phụ thuộc qua constructor của đối tượng bị phụ thuộc.

Ví dụ, tất cả chúng ta đổi khác thông số kỹ thuật của bean room như sau :

12

id=” room “class=” com.huongdanjava. springbeanautowiring. Room “autowire=” constructor “>

Kết quả :

Bean autowiring trong Spring là gì?

4.8 / 5 – ( 12 bầu chọn )