初识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>

 

posted @ 2018-04-23 15:51  ztt_tttt  阅读(275)  评论(0编辑  收藏  举报