深入淺出Spring IOC 4

2021-08-20 04:10:47 字數 4100 閱讀 7231

前言:

今天我們來學習實際開發中經常會使用到的ioc技術:

通過ioc容器架構程式的分層。

實現有兩種方式:

基於xml配置檔案,基於註解。

思路:我們把程式分為3層:

controller層,service層,dao層。

關係為controller層呼叫service層,service層呼叫dao層,並且service層和dao層設計為介面,這是乙個典型的mvc模式後台**分層結構。

**:

基於xml配置方式:

1.建立usercontroller類。 

public

class

usercontroller

public

void

setuserservice

(userservice userservice)

public user getuserbyid

(int id)

}

2.建立userservice介面以及實現類userserviceimpl。

public

inte***ce

userservice

public

class

userserviceimpl

implements

userservice

public

void

setuserdao

(userdao userdao)

@override

public user getuserbyid

(int id)

}

3.建立userdao介面以及實現類userdaoimpl。

public

inte***ce

userdao

public

class

userdaoimpl

implements

userdao

@override

public user getuserbyid

(int id)

}

4.建立user實體類。

public

class

user

public

void

setid

(int id)

public string getname

()public

void

setname

(string name)

public

user

(int id, string name)

public

user

()@override

public string tostring()}

5.在spring.xml配置usercontroller,userservice,userdao,並完成依賴注入。

<?xml version="1.0" encoding="utf-8"?>

xmlns=""

xmlns:xsi=""

xsi:schemalocation=" /spring-beans.xsd">

id="usercontroller"

class="com.southwind.controller.usercontroller">

name="userservice"

ref="userservice">

property>

bean>

id="userservice"

class="com.southwind.service.impl.userserviceimpl">

name="userdao"

ref="userdao">

property>

bean>

id="userdao"

class="com.southwind.dao.impl.userdaoimpl">

bean>

beans>

6.在測試類中獲取usercontroller物件,呼叫方法獲取user物件。

public

class

test

}

對比之前的**,有兩處改動:

(1)在類名處新增@controller註解,表示該類作為乙個控制器。

(2)userservice屬性出新增@autowired註解,表示ioc容器自動完成裝載,

預設是bytype的方式。

3.修改userserviceimpl。

@service

public

class

userserviceimpl

implements

userservice

}

同上,做了兩處改動:

(1)在類名處新增@service註解,表示該類是業務層。

(2)userdao屬性出新增@autowired註解,表示ioc容器自動完成裝載,

預設是bytype的方式

。4.修改userdaoimpl。

@repository

public

class

userdaoimpl

implements

userdao

@override

public user getuserbyid

(int id)

}

做了一處改動:

在類名處新增@repository註解,表示該類是資料介面層。

5.執行測試**。

public

class

test

}

我們知道byname的方式,是通過屬性名去匹配對應bean的id屬性值,但是基於註解的方式我們並沒有給bean設定id,如何完成呢?

其實我們在類中新增註解時,已經設定了預設的id,

即類名首字母小寫之後的值就是id的預設值

@service

public

class

userserviceimpl

implements

userservice

此時,ioc容器中預設賦值,userservice bean的id=userservice,與usercontroller中的屬性名一致,所以可以完成自動。

現在做出修改,手動賦值,設定userservice bean的id=myuserservice。

@service("myuserservice")

public

class

userserviceimpl

implements

userservice

}

很顯然,usercontroller中的userservice屬性也需要去匹配name=

myuserservice的bean,所以設定@qualifier("myuserservice")。

@controller

public

class

usercontroller

}

@qualifier()中的值必須與@service()中的值一致,才能完成自動裝載。

原始碼:

1sm73sjv

密碼: 

petf

深入淺出Hello World 4

開始 對映 之旅,在上面的講解中經常提及到 對映 的概念,那到底什麼是對映?乙個線性區可以和磁碟上的某個檔案關聯或者是某個檔案的一部分來關聯,這也就意味著核心把線性區的訪問頁內某個位元組的訪問轉換成對於檔案的中相應頁面的訪問,這種技術稱之為 記憶體對映 使用strace hello得到 open u...

深入淺出sizeof

int佔 位元組,short佔 位元組 1.0 回答下列問題 答案在文章末尾 1.sizeof char 2.sizeof a 3.sizeof a 4.strlen a 如果你答對了全部四道題,那麼你可以不用細看下面關於sizeof的論述。如果你答錯了部分題目,那麼就跟著我來一起 關於sizeof...

深入淺出ShellExecute

ipconfig c log.txt應如何處理?二樓的朋友,開啟拔號網路這樣 shellexecute null,open c windows rundll32.exe shell32.dll,control rundll c windows system telephon.cpl null,sw ...