Spring框架是個輕量級的Java EE框架。所謂輕量級,是指不依賴於容器就能運行的。spring
Spring以IOC、AOP爲主要思想,其中IoC,Inversion of Control 指控制反轉或反向控制。在Spring框架中咱們經過配置建立類對象,由Spring在運行階段實例化、組裝對象。框架
在傳統的方式中,咱們須要去先實例化一個對象,再調用方法,好比有一個類A ,在其餘類中去調用時須要先實例化才能夠。ide
而在Spring中將對象的建立交由Spring框架進行管理。
首先配置beans-xml文件的頭文件:this
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 6 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> 7 8 9 </beans>
屬性注入:spa
1 package com.spring.model; 2 3 public class Dog { 4 private int dogId; 5 private String dogName; 6 public int getDogId() { 7 return dogId; 8 } 9 public void setDogId(int dogId) { 10 this.dogId = dogId; 11 } 12 public String getDogName() { 13 return dogName; 14 } 15 public void setDogName(String dogName) { 16 this.dogName = dogName; 17 } 18 @Override 19 public String toString() { 20 return "Dog [dogId=" + dogId + ", dogName=" + dogName + "]"; 21 } 22 public Dog(int dogId, String dogName) { 23 super(); 24 this.dogId = dogId; 25 this.dogName = dogName; 26 } 27 public Dog() { 28 super(); 29 } 30 31 32 33 }
property 注入:
1 <!--屬性注入 : 若是屬性是簡單類型,直接經過value屬性進行賦值 --> 2 <bean id="dog1" class="com.spring.model.Dog"> 3 <property name="dogId" value="1"></property> 4 <property name="dogName" value="哈士奇"></property> 5 6 </bean> 7 <!--若是屬性注入的時候是對象,經過ref來賦值,ref的值爲實例化對象的id --> 8 <bean id="man1" class="com.spring.model.Man"> 9 <property name="name" value="ztt"></property> 10 <property name="dog" ref="dog1"></property> 11 </bean>
構造注入:code
1 package com.spring.model; 2 3 public class Man { 4 private String name; 5 private Dog dog; 6 public String getName() { 7 return name; 8 } 9 public void setName(String name) { 10 this.name = name; 11 } 12 public Dog getDog() { 13 return dog; 14 } 15 public void setDog(Dog dog) { 16 this.dog = dog; 17 } 18 @Override 19 public String toString() { 20 return "Man [name=" + name + ", dog=" + dog + "]"; 21 } 22 }
1 <!--構造注入:須要注意的是,構造注入時要有一個無參的構造 2 注入時默認是按照順序來得 3 若是賦值時沒有按照構造時的順序來 咱們能夠指定索引 index,索引從0開始; 4 賦值時也能夠根據屬性的類型進行賦值,但當多個屬性的類型同樣時,此方法就存在了弊端 5 6 --> 7 8 <bean id="dog2" class="com.spring.model.Dog"> 9 <constructor-arg value="2"></constructor-arg> 10 <constructor-arg value="泰迪"></constructor-arg> 11 </bean>
經常使用的List的注入方法:xml
1 <!--List的注入方法 --> 2 <bean id="list1" class="com.spring.model.List"> 3 <property name="list"> 4 <list> 5 <value>武漢</value> 6 <value>濟南</value> 7 <value>石家莊</value> 8 <value>煙臺</value> 9 </list> 10 </property> 11 </bean> 12
經常使用的Map的注入方法:對象
1 <!-- Map的注入方法 --> 2 <bean id="map1" class="com.spring.model.Map"> 3 <property name="map"> 4 <map> 5 <entry key="1" value="武漢"></entry> 6 <entry key="2" value="濟南"></entry> 7 <entry key="3" value="石家莊"></entry> 8 <entry key="4" value="煙臺"></entry> 9 </map> 10 </property> 11 </bean>
p命名空間:blog
在bean配置的頭文件中添加xmlns:p="http://www.springframework.org/schema/p"索引
1 <!--p命名空間,簡單屬性 --> 2 <bean id="dog3" class="com.spring.model.Dog" p:dogId="3" p:dogName="柴犬"></bean> 3 4 <!--p命名空間,對象屬性 --> 5 <bean id="man3" class="com.spring.model.Man" p:name="ztt" p:dog-ref="dog1"></bean>
自動裝配:
1 <!--自動裝配autowire 2 byName:與對象的屬性的名字相匹配 3 例如:Man的其中一個屬性是private Dog dog;因此找到的是Dog的實例化對象id是dog的 4 若是Man的其中一個屬性是private Dog dog3;因此找到的是Dog的實例化對象id是dog3的 5 byType:匹配相同的數據類型,須要注意的是當前容器只能有一個該類型的bean 6 --> 7 <bean id="dog" class="com.spring.model.Dog" p:dogId="0" p:dogName="哈士奇"></bean> 8 <!-- --> 9 <bean id="man4" class="com.spring.model.Man" p:name="lxx" autowire="byName"></bean> 10 <bean id="man5" class="com.spring.model.Man" p:name="lxx" autowire="byType"></bean>