国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務(wù)器之家 - 編程語言 - JAVA教程 - spring定義和裝配bean詳解

spring定義和裝配bean詳解

2021-02-27 14:03kite___ JAVA教程

這篇文章主要介紹了spring定義和裝配bean詳解,具有一定參考價值,需要的朋友可以了解下。

在閱讀本文之前,大家可先參閱簡單理解Spring之IOC和AOP及代碼示例一文,了解下Spring中IOC和AOP的相關(guān)內(nèi)容。下面進入正題。本篇文章介紹在Spring中如何定義和裝載Java Bean。

業(yè)務(wù)場景

還是人開車的例子。首先,定義一個Car接口和兩個實現(xiàn)了Benz和BMW,然后定義一個Person類,Person類依賴Car接口。

?
1
2
3
public interface Car {
  void go();
}
?
1
2
3
4
5
public class Benz implements Car {
  public void go() {
    System.out.println("benz go......");
  }
}
?
1
2
3
4
5
public class BMW implements Car {
  public void go() {
    System.out.println("bmw go......");
  }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Person {
  String name = "";
 
  Car car = null;
  public Car getCar() {
    return car;
  }
 
  public void setCar(Car car) {
    this.car = car;
  }
 
  public Person(String name) {
    this.name=name;
  }
 
  public void Drive(){
    System.out.println(name+" is driving ...");
    car.go();
  }
}

在Person類中我們可以看到,car對象是該類的依賴對象,需要通過構(gòu)造方法注入到Person類中。以上的代碼還完全沒有Spring的影子,下面看看Spring是如何來注入

添加Spring依賴

現(xiàn)在很多項目都適用maven來管理依賴,本項目也是如此。我在pom.xml中加入一下依賴節(jié)點

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-core</artifactId>
  <version>3.2.6.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-beans</artifactId>
  <version>3.2.6.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>3.2.6.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context-support</artifactId>
  <version>3.2.6.RELEASE</version>
</dependency>

將這些dependency節(jié)點放入pom.xml文件的dependencies節(jié)點下,eclipse會自動下載相關(guān)的包到默認(rèn)位置。

手動定義和裝配Bean

在項目的根目錄中新建一個名叫bean.xml的xml文件,內(nèi)容如下:

?
1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
  <bean id="car" class="org.zdk.springProj1.BMW" />
  <bean id="tom" class="org.zdk.springProj1.Person">
    <constructor-arg value="Tom" />
    <property name="car" ref="car" />
  </bean>
</beans>

上面的XML文件首先定義了一個id為car的bean,又定義了一個id為tom的bean,car作為tom的依賴,通過<property name="car" ref="car" />的方式被手動地裝配到了tom的car屬性中。

創(chuàng)建應(yīng)用對象之間協(xié)作關(guān)系的行為被稱為裝配(wiring),這也是依賴對象注入的本質(zhì)。
接下來我們在main方法中實例化一個應(yīng)用上下文對象,并獲取bean中的tom節(jié)點

?
1
2
3
4
5
6
7
8
9
public class App
{
  public static void main( String[] args )
  {
    ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
    Person tom=(Person) context.getBean("tom");
    tom.Drive();
  }
}

運行程序,輸出結(jié)果為:

?
1
2
Tom is driving ...
bmw go......

自動裝配

再重復(fù)一遍,創(chuàng)建應(yīng)用對象之間協(xié)作關(guān)系的行為被稱為裝配(wiring),而不是實例化對象的過程。在上面的xml文件中,我通過<property name="car" ref="car" />的方式來裝配了依賴對象,但是隨著應(yīng)用的不斷發(fā)展,xml配置文件肯定會越來越復(fù)雜,我們通過ref="car"來關(guān)聯(lián)id為car的bean的這種方式已經(jīng)開始落后了。下面我來介紹一下Spring如何實現(xiàn)自動裝配bean。

自動裝配的類型

Spring共四種裝配策略,為了降低本文的復(fù)雜性,我介紹兩種常用的策略,byName方式和byType方式。顧名思義,byName方式就是看屬性的名字和bean的id是否相同,在本例中,Person類有一個名叫car的屬性,如果將該類或改屬性設(shè)置為自動裝配且裝配策略為byName的話,Spring會去找id為car(必須是同名)的bean。byType方式是比較類型是否相同。就本例而言,如果將Person類或Person類的car屬性設(shè)置為自動裝配且裝配策略為byType的話,由于car屬性是Car類型,所以,Spring在進行自動裝配時,會去找類型為Car或其子類的bean。

使用XML實現(xiàn)自動裝配

下面我來修改代碼,使用xml配置的方式來實現(xiàn)自動裝配。

?
1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
  <bean id="car" class="org.zdk.springProj1.BMW" />
  <bean id="tom" class="org.zdk.springProj1.Person" autowire="byName">
    <constructor-arg value="Tom" />
  </bean>
</beans>

Person類無需做任何修改。

首先,我去掉了<propertyname="car"ref="car"/>這行代碼,因為它是手工的方式。然后,我將id為tom的bean增加一個屬性autowire="byName",將其設(shè)置為通過名字自動裝配依賴,在獲取Person對象時,Person的所有屬性名稱就都有了特殊的含義。Spring監(jiān)測到了Person類又一個名叫car的屬性,并且在配置文件中發(fā)現(xiàn)了一個id為car的bean,于是乎,就將其自動裝配給了Person的car屬性。

通過注解實現(xiàn)自動裝配

我們將bean.xml做如下修改

?
1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans default-autowire="byName">
  <bean id="car" class="org.zdk.springProj1.BMW" />
  <bean id="tom" class="org.zdk.springProj1.Person">
    <constructor-arg value="Tom" />
  </bean>
</beans>

將id為tom的bean的一個屬性autowire="byName"刪除,然后在跟節(jié)點beans中添加一個屬性default-autowire="byName"來設(shè)置該文件內(nèi)定義的所有bean的自動裝配方式的默認(rèn)值為byName。然后對Person 類做一點修改,在car的setter方法上加上@Autowired注解,來通知Spring對該屬性進行自動裝配。重新運行代碼,輸出結(jié)果不變。

?
1
2
3
4
@Autowired
public void setCar(Car car) {
  this.car = car;
}

通過注解來實現(xiàn)自動裝配的話,需要首先在beans根目錄上制定默認(rèn)的自動裝配方式,然后就不需要在配置文件中為每一個需要自動裝配的bean來配置autowire屬性了(如果方式與默認(rèn)的不一致,仍然可以單獨配置,來覆蓋默認(rèn)的自動裝配方式)。注解的方式更加細(xì)膩,它可以對需要自動裝配的bean達(dá)到屬性級的控制。

在上面的所有代碼中,我們在配置文件中都是使用的org.zdk.springProj1.BMW類作為Person類的依賴,如果由于業(yè)務(wù)需要,Person類不需要開寶馬車而改開奔馳車了,只需要將該配置修改為org.zdk.springProj1.Benz即可,無需修改任何Java代碼,這就是Spring作為IOC容器的強大之處。

總結(jié)

以上就是本文關(guān)于spring定義和裝配bean詳解的全部內(nèi)容,希望對大家有所幫助。如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

原文鏈接:http://blog.csdn.net/daguanjia11/article/details/49227951

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 中文字幕视频 | 91伊人| 精品久久电影 | 亚洲精品久久久久999中文字幕 | 91无吗| 欧美视频在线观看 | 91免费在线看| 一区二区三区四区国产 | 欧美一区久久 | 国产伦乱 | 日韩高清国产一区在线 | 欧美精品一区二区三区在线播放 | 欧美日韩国产一级片 | 亚洲在线视频一区二区 | 美足av| 欧美.com | 欧美一区免费 | 亚洲淫视频 | 久久久久这里只有精品 | 亚洲免费视频大全 | 中文字幕在线一区 | 国产精品99久久久久久久vr | 国产精品久久久 | 欧美视频区| 亚洲欧美激情精品一区二区 | 国产精品久久久久久av公交车 | 国产日韩一级片 | 亚洲精品在线免费看 | 免费不卡视频 | 久草青青 | 一区二区中文字幕 | 午夜欧美| 国产欧美精品一区二区色综合 | 九色在线 | 老司机av导航 | 久久久久亚洲美女啪啪 | 精品久久久久一区二区国产 | 欧美亚洲激情 | 欧美一级淫片丝袜脚交 | 亚洲天堂第一页 | 综合色区 |