初识Spring框架IOC属性注入
Spring框架是个轻量级的Java EE框架。所谓轻量级,是指不依赖于容器就能运行的。
Spring以IOC、AOP为主要思想,其中IoC,Inversion of Control 指控制反转或反向控制。在Spring框架中我们通过配置创建类对象,由Spring在运行阶段实例化、组装对象。
在传统的方式中,我们需要去先实例化一个对象,再调用方法,比如有一个类A ,在其他类中去调用时需要先实例化才可以。
而在Spring中将对象的创建交由Spring框架进行管理。
首先配置beans-xml文件的头文件:
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>
属性注入:
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>
构造注入:
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的注入方法:
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命名空间:
在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>