日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring IOC(Inversion Of Controll 控制反转)

發(fā)布時間:2023/12/20 javascript 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring IOC(Inversion Of Controll 控制反转) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

IOC是什么?

對象之間的依賴關(guān)系由容器來建立。

DI(Dependency Injection 依賴注入)是什么?

容器通過調(diào)用對象提供的set方法或者構(gòu)造器來建立依賴關(guān)系。

注:IOC是目標,DI是手段。

set方式注入

step1.提供相應的set方法。

step2.配置元素。


構(gòu)造器方式注入

step1.添加相應的構(gòu)造器。

public A(B b){System.out.println("A(B)");this.b = b;}

step2.配置constructor-arg元素。

自動裝配(了解)

指的是spring容器依據(jù)某種規(guī)則,自動建立對象之間的依賴關(guān)系。

注意:

a、默認情況下,容器不會自動裝配。

b、可以通過指定autowire屬性來告訴容器進行自動裝配(容器仍然需要通過調(diào)用set方法或構(gòu)造器來完成依賴關(guān)系的建立)。

<bean id="wt" class="ioc2.Waiter"/> <bean id="wt1" class="ioc2.Waiter"/> <!-- autowire屬性:表示讓容器自動裝配,該屬性有如下三個值:byName:容器依據(jù)屬性名查找對應的bean然后調(diào)用對應的set方法來完成注入。注:a.如果找不到對應的bean注入null。b.不可能找到多個符合條件的bean。byType:容器依據(jù)屬性類型查找對應的bean,然后調(diào)用對應的set方法來完成注入。注:a.如果找不到對應的bean注入null。b.有可能找到多個符合條件的bean,此時會出錯。constructor:容器依據(jù)屬性類型查找對應的bean,然后調(diào)用對應的構(gòu)造器來完成注入。--> <bean id="rest" class="ioc2.Restaurant" autowire="byType"/>

注入基本類型的值

使用value屬性即可。

注入集合類型的值(List Set Map Properties)

引用的方式注入集合類型的值

<%@taglib uri=”http//xxxxxx” prefix=”c”%>

uri–>命名空間 namespace

c–>命名空間的別名

<bean id="vb1" class="value.ValueBean"><property name="name" value="胡八一"/><property name="age" value="30"/><property name="city"><list><value>北京</value><value>上海</value><value>杭州</value></list></property><property name="interest"><set><value>釣魚</value><value>看書</value><value>聽音樂</value></set></property><property name="score"><map><entry key="english" value="90"/><entry key="math" value="95"/></map></property><property name="db"><props><prop key="username">Tiger</prop><prop key="password">123456</prop></props></property> </bean><!-- 將集合類型的值配置成一個bean --> <util:list id="cityBean"><value>上海</value><value>杭州</value><value>北京</value> </util:list> <util:set id="interestBean"><value>書法</value><value>繪畫</value><value>寫作</value> </util:set> <util:map id="scoreBean"><entry key="english" value="90"/><entry key="math" value="96"/> </util:map> <util:properties id="dbBean"><prop key="username">Sally</prop><prop key="password">123456</prop> </util:properties> <!-- 引用的方式注入集合類型的值 --> <bean id="vb2" class="value.ValueBean"><property name="city" ref="cityBean"/><property name="interest" ref="interestBean"/><property name="score" ref="scoreBean"/><property name="db" ref="dbBean"></property> </bean><!-- 讀取properties文件的內(nèi)容classpath:按照類路徑來搜素。spring容器會依據(jù)路徑找到對應的配置文件,然后讀取該文件的內(nèi)容到properties對象。--> <util:properties id="config" location="classpath:config.properties"/>

讀取properties文件的內(nèi)容

<!-- 讀取properties文件的內(nèi)容classpath:按照類路徑來搜素。spring容器會依據(jù)路徑找到對應的配置文件,然后讀取該文件的內(nèi)容到properties對象。 --><util:properties id="config" location="classpath:config.properties"/>

使用spring表達式

可以使用spring表達式讀取其他bean的屬性,它的語法類似于el表達式。

<bean id="sp1" class="value.SpelBean"><property name="name" value="#{vb1.name}"/><property name="city" value="#{vb1.city[1]}"></property><!-- #{vb1.score['英語']} --><property name="score" value="#{vb1.score.english}"></property><property name="pageSize" value="#{config.pagesize}"/></bean><bean id="vb1" class="value.ValueBean">

使用注解簡化配置

什么是組件掃描?

spring容器啟動之后會掃描指定的包及其子包下面的所有類,如果該類前面有特定的注解(比如@Component),則spring容器會將其納入容器進行管理。(相當于這兒配置了一個bean元素)。

如何進行組件掃描?

step1.在類前添加特定的注解。



注:除了@Component注解,還有@Service,@Repository,@Controller,作用是等價的,只不過有語義上的差異。

step2.在配置文件當中,添加組件掃描的配置。

<!-- 配置組件掃描 --> <!-- base-package屬性:指定要掃描的包名,spring容器會掃描該包及其子包下面的所有類,如果該類前面有特定的注解(比如@Component),則spring容器會將其納入容器進行管理。(相當于這兒配置了一個bean元素)。--> <context:component-scan base-package="annotation"></context:component-scan>

其他相關(guān)注解

@Scope("singleton")//指定作用域 @Lazy(true)//指定延時加載 public class SomeBean {public SomeBean(){System.out.println("SomeBean()");}@PostConstruct//指定初始化方法public void init(){System.out.println("init()");}@PreDestroy//指定銷毀方法public void destroy(){System.out.println("destroy()");} }

依賴注入相關(guān)的注解

@Autowired和Qualifier

a.該注解支持set方式注入和構(gòu)造器方式的注入。

b.當使用set方式注入時,可以將@Autowired添加到set方法前面,如果不使用@Qualifier,則容器會使用byType的方式來注入,有可能出錯,所以建議使用@Qualifier注解,明確指出要注入的bean的id。

注:也可以將這兩個注解直接添加到屬性前。


@Autowired public void setWt(@Qualifier("wt") Waiter wt) {System.out.println("setWt()");this.wt = wt; }

c.當采用構(gòu)造器注入時,可以將注解添加到對應的構(gòu)造器前面即可。

@Autowired public School(@Qualifier("wt")Waiter wt) {System.out.println("School(wt)");this.wt = wt; }

@Resource注解

a.只支持set方式的注入。
b.可以將該注解添加到屬性前,使用name屬性指定要注入的bean的id(如果不指定,會按照byType的方式注入)。



注:也可以將注解添加到屬性前。

@Value注解

a.可以使用該注解來注入基本類型的值。

b.也可以使用該注解來使用spring表達式。

c.該注解可以添加到屬性前,或者添加到對應的set方法前。

@Value("#{config.pagesize}") private String pageSize; @Value("花千骨") private String name;

總結(jié)

以上是生活随笔為你收集整理的Spring IOC(Inversion Of Controll 控制反转)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。