Spring 中的 Bean

本文详细介绍了Spring框架中IOC反转控制的实现原理及各种注入形式,包括基本属性注入、构造函数注入、集合类型注入等,并提供了完整的代码示例。
上一篇主要讲了IOC反转控制,也就是程序中有些东西用XML文档配置去关联,而不是在类本身里面写明!
 这篇接着写注入的形式!我们先在上次的项目中修改!继续在fengyan包下添加一个Home.java类:
ContractedBlock.gif ExpandedBlockStart.gif Home.java
None.gifpackage fengyan;
ExpandedBlockStart.gifContractedBlock.gif
/** *//**
InBlock.gif * 
InBlock.gif * 
@author fengyan
InBlock.gif * @date: 2006-12-31 14:50
ExpandedBlockEnd.gif 
*/

ExpandedBlockStart.gifContractedBlock.gif
public class Home dot.gif{
InBlock.gif
InBlock.gif    
private String address;
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public String getAddress() dot.gif{
InBlock.gif        
return address;
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public void setAddress(String address) dot.gif{
InBlock.gif        
this.address = address;
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif
然后在User.java中添加一Home属性
ContractedBlock.gif ExpandedBlockStart.gif User.java
None.gifpackage fengyan;
ExpandedBlockStart.gifContractedBlock.gif
/** *//**
InBlock.gif * 
InBlock.gif * 
@author: fengyan
InBlock.gif * date:     2006-12-31 02:37
InBlock.gif *
ExpandedBlockEnd.gif 
*/

ExpandedBlockStart.gifContractedBlock.gif
public class User dot.gif{
InBlock.gif
InBlock.gif    
private String userName;
InBlock.gif
InBlock.gif    
//添加Home属性
InBlock.gif
    private Home myhome;
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public Home getMyhome() dot.gif{
InBlock.gif        
return myhome;
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public void setMyhome(Home myhome) dot.gif{
InBlock.gif        
this.myhome = myhome;
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public String getUserName() dot.gif{
InBlock.gif        
return userName;
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public void setUserName(String userName) dot.gif{
InBlock.gif        
this.userName = userName;
ExpandedSubBlockEnd.gif    }
    
ExpandedBlockEnd.gif}

None.gif
将 Home Bean的信息添加到applicationContext.xml中
None.gif      < bean  id ="home"  class ="fengyan.Home"  abstract ="false"
None.gif        singleton
="true"  lazy-init ="default"  autowire ="default"
None.gif        dependency-check
="default" >
None.gif        
< property  name ="address" >
None.gif            
< value > 湖北 武汉 </ value >
None.gif        
</ property >
None.gif    
</ bean >
自然的,User Bean的配置 信息中就少了一个myhome属性:
None.gif < bean  id ="user"  class ="fengyan.User"  abstract ="false"
None.gif        singleton
="true"  lazy-init ="default"  autowire ="default"
None.gif        dependency-check
="default" >
None.gif        
< property  name ="userName" >
None.gif            
< value > efly </ value >
None.gif        
</ property >
None.gif     
</ bean >
我们应该添加myhome,但此时myhome为一对象应该用ref引用,如下
None.gif      < bean  id ="user"  class ="fengyan.User"  abstract ="false"
None.gif        singleton
="true"  lazy-init ="default"  autowire ="default"
None.gif        dependency-check
="default" >
None.gif        
< property  name ="userName" >
None.gif            
< value > efly </ value >
None.gif        
</ property >
None.gif        
<!--  添加一个属性  -->
None.gif        
< property  name ="myhome" >
None.gif            
< ref  bean ="home" /> <!--  home为上面注入的bean id  -->
None.gif        
</ property >
None.gif     
</ bean >
最后完整的applicationContext.xml文件如下:
None.gif <? xml version="1.0" encoding="UTF-8" ?>
None.gif
<! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" >
None.gif
None.gif
< beans >
None.gif    
None.gif    
< bean  id ="home"  class ="fengyan.Home"  abstract ="false"
None.gif        singleton
="true"  lazy-init ="default"  autowire ="default"
None.gif        dependency-check
="default" >
None.gif        
< property  name ="address" >
None.gif            
< value > 湖北 武汉 </ value >
None.gif        
</ property >
None.gif    
</ bean >
None.gif    
None.gif    
< bean  id ="user"  class ="fengyan.User"  abstract ="false"
None.gif        singleton
="true"  lazy-init ="default"  autowire ="default"
None.gif        dependency-check
="default" >
None.gif        
< property  name ="userName" >
None.gif            
< value > efly </ value >
None.gif        
</ property >
None.gif        
<!--  添加一个属性  -->
None.gif        
< property  name ="myhome" >
None.gif            
< ref  bean ="home" /> <!--  home为上面注入的bean id  -->
None.gif        
</ property >
None.gif     
</ bean >
None.gif    
None.gif
</ beans >

而运行的测试文件仅仅加入System.out.println(user.getMyhome().getAddress());即可得到注入的地址

None.gif package  fengyan;
None.gif
None.gif
import  org.springframework.context.ApplicationContext;
None.gif
import  org.springframework.context.support.FileSystemXmlApplicationContext;
None.gif
ExpandedBlockStart.gifContractedBlock.gif
/** */ /**
InBlock.gif * 
InBlock.gif * 
@author: fengyan
InBlock.gif * date:     2006-12-31 02:39
InBlock.gif *
ExpandedBlockEnd.gif 
*/

ExpandedBlockStart.gifContractedBlock.gif
public   class  TestMain  dot.gif {
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public static void main(String[] args)dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//*
InBlock.gif        //依赖注入
InBlock.gif        User user = new User();
InBlock.gif        user.setUserName("fengyan");        
InBlock.gif        System.out.println(user.getUserName());
ExpandedSubBlockEnd.gif        
*/

InBlock.gif        
//ICO 反转控制
InBlock.gif
        ApplicationContext context = new FileSystemXmlApplicationContext("fengyan/applicationContext.xml");
InBlock.gif        
//这样我们获取了一个全局的应用程序上下文对象
InBlock.gif        
InBlock.gif        
//下面我们创建实例就不是先前的直接new 了
InBlock.gif
        User user = (User)context.getBean("user");//是对象类型,需转换
InBlock.gif
        System.out.println(user.getUserName());
InBlock.gif        System.out.println(user.getMyhome().getAddress());
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedBlockEnd.gif}

None.gif
另外还有构造函数的注入,如何通过一构造函数的注入呢?假设现在我将 上在applicationContext.xml文件中user属性myhome去掉,然后在User.java中写一构造函数,
None.gif // 构造函数的注入
None.gif
     public  User(Home myhome)
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif {
InBlock.gif        
this.myhome = myhome;
ExpandedBlockEnd.gif    }
那么这个时候该User实例化时需要一个参数,那么如何做呢?

我们将applicationContext.xml文件中user  bean的属性autowire由默认的default改为consctructor也就是构造,
None.gif <? xml version="1.0" encoding="GBK" ?>
None.gif
<! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" >
None.gif
None.gif
< beans >
None.gif    
None.gif    
< bean  id ="home"  class ="fengyan.Home"  abstract ="false"
None.gif        singleton
="true"  lazy-init ="default"  autowire ="default"
None.gif        dependency-check
="default" >
None.gif        
< property  name ="address" >
None.gif            
< value > 湖北 武汉 </ value >
None.gif        
</ property >
None.gif    
</ bean >
None.gif    
None.gif    
< bean  id ="user"  class ="fengyan.User"  abstract ="false"
None.gif        singleton
="true"  lazy-init ="default"  autowire ="constructor"
None.gif        dependency-check
="default" >
None.gif        
< property  name ="userName" >
None.gif            
< value > efly </ value >
None.gif        
</ property >
None.gif        
None.gif        
<!--  添加一个属性 
None.gif        <property name="myhome">
None.gif            <ref bean="home"/>  home为上面注入的bean id 
None.gif        </property>
-->
None.gif     
</ bean >
None.gif    
None.gif
</ beans >

此时我们直接运行,发现依然成功!得到了“湖北 武汉”,为什么它能自动输出呢,也就是我们的User.java中本身有二个属性 userName 和myhome,其中有一个属性我们设定了,另外一个没有设定,这时它就会去找,那么找的时候有下面几种方式,这里我说说bean中的autowire属性,它有以下几种取值:
autowire="byType",可以使bean在运行的时候根据需要去寻找同类型的已经在applicationContext.xml中定义了的属性,如果找不到,则处于未绑定状态。
autowire="byName",可以使bean在运行时根据需要去寻找同名的已在applicationContext.xml中定义的属性,如果找不到处于未绑定状态。
autowire="autodetect":这个是一个个式,直到找到合适的!
autowire="constractor",可以使bean在运行的时候根据已在applicationContext.xml中定义的的属性去寻找相关的构造方法属性,如果找不到则牌未绑定状态,它使用的是byType,
我们如果将autowire="constractor"改为byType,如果我们定义了多个Home类型的bean则运行的时候会出错,因为有多个类型满足条件!这时可以换为byName,aotuwrie="byName"这里的name是哪里的呢?这里的名字应该是User.java类中定义的属性 private Home myhome;的 myhome同名即可!这时要注意一下,在User.java中加入一个无参数的构造函数!

这时如果我们将注入的user  bean复制一份 user2,那么在程序中就可以输出user和user2的内容完全一样,但它们的getMyhome()的Home对象是不是同一个注入的myhome对象呢,我们可以用user.getMyhome().hashcode();发现是完全一样的,由此可知它们所使用的是同一个Home对象!
这样我们明白一件事情,就是上面我们注入的myhome Bean只创建了一次,那么什么时候会创建一次,什么时候会创建多次呢,我们可以看到在bean  中有一属性singleton,在设计模式中也有这样一种模式,单例模式!由此可知如果我们将 真值改为false,则就会在程序运行中创建多个myhome Bean

这时我们再改改,将User.java中的Home属性 ,改为Home[] myhome,以为一集合!或者说是一列,集合,MAP怎么办,

ContractedBlock.gif ExpandedBlockStart.gif User.java
None.gifpackage fengyan;
None.gif
None.gif
import java.util.List;
None.gif
import java.util.Map;
None.gif
import java.util.Set;
None.gif
ExpandedBlockStart.gifContractedBlock.gif
/** *//**
InBlock.gif * 
InBlock.gif * 
@author: fengyan
InBlock.gif * date:     2006-12-31 02:37
InBlock.gif *
ExpandedBlockEnd.gif 
*/

ExpandedBlockStart.gifContractedBlock.gif
public class User dot.gif{
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public User()dot.gif{}
InBlock.gif    
private String userName;
InBlock.gif
InBlock.gif    
//添加Home属性
InBlock.gif
    private Home[] myhome;
InBlock.gif    
private List myhomeList;
InBlock.gif    
private Set myhomeSet;
InBlock.gif    
private Map myhomeMap;
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public Home[] getMyhome() dot.gif{
InBlock.gif        
return myhome;
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public void setMyhome(Home[] myhome) dot.gif{
InBlock.gif        
this.myhome = myhome;
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public String getUserName() dot.gif{
InBlock.gif        
return userName;
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public void setUserName(String userName) dot.gif{
InBlock.gif        
this.userName = userName;
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public List getMyhomeList() dot.gif{
InBlock.gif        
return myhomeList;
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public void setMyhomeList(List myhomeList) dot.gif{
InBlock.gif        
this.myhomeList = myhomeList;
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public Map getMyhomeMap() dot.gif{
InBlock.gif        
return myhomeMap;
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public void setMyhomeMap(Map myhomeMap) dot.gif{
InBlock.gif        
this.myhomeMap = myhomeMap;
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public Set getMyhomeSet() dot.gif{
InBlock.gif        
return myhomeSet;
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public void setMyhomeSet(Set myhomeSet) dot.gif{
InBlock.gif        
this.myhomeSet = myhomeSet;
ExpandedSubBlockEnd.gif    }
    
ExpandedBlockEnd.gif}

None.gif

在applicationContext.xml中添加Home[]信息,如下:
None.gif      < property  name ="myhome" >
None.gif             
< list >
None.gif                 
< ref  bean ="home" />
None.gif                 
< ref  bean ="myhome" />
None.gif             
</ list >
None.gif        
</ property >
TestMain.java运行 文件中如下读取:
None.gif      // 对象集合演示
None.gif
        Home[] homes  =  (Home[])(user.getMyhome());
None.gif        
for ( int  i  =   0  ; i  <  homes.length; i ++ )
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            System.out.println(homes[i].getAddress());
ExpandedBlockEnd.gif        }

这时我们得到正确输出!这时说明数组成功了!

这是对象集合,那么List呢,我们再在配置文件中将user Bean添加一属性:

None.gif              < property  name ="myhomeList" >
None.gif                
< list >
None.gif                    
< ref  bean ="myhome"   />
None.gif                    
< value > HAHAXIXItest </ value >
None.gif                    
< ref  bean ="home"   />
None.gif                
</ list >
None.gif            
</ property >

可知该List中有对象也有普通值!在TestMain中我们这样使用:
None.gif      // List 集体演示
None.gif
        List myList  =  (List)user.getMyhomeList();
None.gif        Iterator it 
=  myList.iterator(); // 跌代器
None.gif
         while (it.hasNext())
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            System.out.println(it.next().toString());
ExpandedBlockEnd.gif        }
接下来中SET,如何做,其实和List差不多。在配置文件中user Bean添加一属性
None.gif < property  name ="myhomeSet" >
None.gif                
< set >
None.gif                    
< ref  bean ="myhome"   />
None.gif                    
< value > setvalue </ value >
None.gif                
</ set >
None.gif            
</ property >
在运行类中使用如下代码测试:
None.gif          // Set演示
None.gif
        Set myset  =  (Set)user.getMyhomeSet();
None.gif        Iterator it1 
=  myset.iterator();
None.gif        
while (it1.hasNext())
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            System.out.println(it1.next().toString());
ExpandedBlockEnd.gif        }
最后一个也是相对比较麻烦的一个!我们使用OutLine可视化做,如图,

它是键值对的形式,我们添加一个KEY:t1值为对象类型,。我们引用的上面注入的myhome  Bean!
配置文件user  Bean添加的属性代码如下
None.gif < property  name ="myhomeMap" >
None.gif                
< map >
None.gif                    
< entry  key ="t1" >
None.gif                        
< ref  bean ="myhome"   />
None.gif                    
</ entry >
None.gif                    
< entry  key ="t2"  value ="mapTest" ></ entry >
None.gif                
</ map >
None.gif            
</ property >
而测试运行代码如下:
None.gif // Map演示
None.gif
        Map mymap  =  (Map)user.getMyhomeMap();
None.gif        System.out.println( ( (Home)(mymap.get(
" t1 " )) ).getAddress() ); // 通过主键找
None.gif
这样也就运行到了结果!最后将完整的代码贴出:
ContractedBlock.gif ExpandedBlockStart.gif User.java
None.gifpackage fengyan;
None.gif
None.gif
import java.util.List;
None.gif
import java.util.Map;
None.gif
import java.util.Set;
None.gif
ExpandedBlockStart.gifContractedBlock.gif
/** *//**
InBlock.gif * 
InBlock.gif * 
@author: fengyan
InBlock.gif * date:     2006-12-31 02:37
InBlock.gif *
ExpandedBlockEnd.gif 
*/
ExpandedBlockStart.gifContractedBlock.gif
public class User dot.gif{
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public User()dot.gif{}
InBlock.gif    
private String userName;
InBlock.gif
InBlock.gif    
//添加Home属性
InBlock.gif
    private Home[] myhome;
InBlock.gif    
private List myhomeList;
InBlock.gif    
private Set myhomeSet;
InBlock.gif    
private Map myhomeMap;
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public Home[] getMyhome() dot.gif{
InBlock.gif        
return myhome;
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public void setMyhome(Home[] myhome) dot.gif{
InBlock.gif        
this.myhome = myhome;
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public String getUserName() dot.gif{
InBlock.gif        
return userName;
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public void setUserName(String userName) dot.gif{
InBlock.gif        
this.userName = userName;
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public List getMyhomeList() dot.gif{
InBlock.gif        
return myhomeList;
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public void setMyhomeList(List myhomeList) dot.gif{
InBlock.gif        
this.myhomeList = myhomeList;
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public Map getMyhomeMap() dot.gif{
InBlock.gif        
return myhomeMap;
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public void setMyhomeMap(Map myhomeMap) dot.gif{
InBlock.gif        
this.myhomeMap = myhomeMap;
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public Set getMyhomeSet() dot.gif{
InBlock.gif        
return myhomeSet;
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public void setMyhomeSet(Set myhomeSet) dot.gif{
InBlock.gif        
this.myhomeSet = myhomeSet;
ExpandedSubBlockEnd.gif    }
    
ExpandedBlockEnd.gif}

None.gif

ContractedBlock.gif ExpandedBlockStart.gif TestMain.java
None.gifpackage fengyan;
None.gif
None.gif
import java.util.Iterator;
None.gif
import java.util.List;
None.gif
import java.util.Map;
None.gif
import java.util.Set;
None.gif
None.gif
import org.springframework.context.ApplicationContext;
None.gif
import org.springframework.context.support.FileSystemXmlApplicationContext;
None.gif
ExpandedBlockStart.gifContractedBlock.gif
/** *//**
InBlock.gif * 
InBlock.gif * 
@author: fengyan
InBlock.gif * date:     2006-12-31 02:39
InBlock.gif *
ExpandedBlockEnd.gif 
*/

ExpandedBlockStart.gifContractedBlock.gif
public class TestMain dot.gif{
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public static void main(String[] args)dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//*
InBlock.gif        //依赖注入
InBlock.gif        User user = new User();
InBlock.gif        user.setUserName("fengyan");        
InBlock.gif        System.out.println(user.getUserName());
ExpandedSubBlockEnd.gif        
*/

InBlock.gif        
//ICO 反转控制
InBlock.gif
        ApplicationContext context = new FileSystemXmlApplicationContext("fengyan/applicationContext.xml");
InBlock.gif        
//这样我们获取了一个全局的应用程序上下文对象
InBlock.gif        
InBlock.gif        
//下面我们创建实例就不是先前的直接new 了
InBlock.gif
        User user = (User)context.getBean("user");//是对象类型,需转换
InBlock.gif
        System.out.println(user.getUserName());
InBlock.gif        
//对象集合演示
InBlock.gif
        Home[] homes = (Home[])(user.getMyhome());
InBlock.gif        
for(int i = 0 ; i < homes.length; i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            System.out.println(homes[i].getAddress());
ExpandedSubBlockEnd.gif        }

InBlock.gif        
InBlock.gif        
//List 集体演示
InBlock.gif
        List myList = (List)user.getMyhomeList();
InBlock.gif        Iterator it 
= myList.iterator();//跌代器
InBlock.gif
        while(it.hasNext())
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            System.out.println(it.next().toString());
ExpandedSubBlockEnd.gif        }

InBlock.gif        
InBlock.gif        
//Set演示
InBlock.gif
        Set myset = (Set)user.getMyhomeSet();
InBlock.gif        Iterator it1 
= myset.iterator();
InBlock.gif        
while(it1.hasNext())
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            System.out.println(it1.next().toString());
ExpandedSubBlockEnd.gif        }

InBlock.gif        
InBlock.gif        
//Map演示
InBlock.gif
        Map mymap = (Map)user.getMyhomeMap();
InBlock.gif        System.out.println( ( (Home)(mymap.get(
"t1")) ).getAddress() );//通过主键找
ExpandedSubBlockEnd.gif
    }

InBlock.gif
ExpandedBlockEnd.gif}

None.gif

ContractedBlock.gif ExpandedBlockStart.gif applicationContext.xml
None.gif<?xml version="1.0" encoding="GBK"?>
None.gif
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
None.gif
None.gif
<beans>
None.gif    
None.gif    
<bean id="home" class="fengyan.Home" abstract="false"
None.gif        singleton
="true" lazy-init="default" autowire="default"
None.gif        dependency-check
="default">
None.gif        
<property name="address">
None.gif            
<value>湖北 武汉</value>
None.gif        
</property>
None.gif    
</bean>
None.gif        
<bean id="myhome" class="fengyan.Home" abstract="false"
None.gif        singleton
="true" lazy-init="default" autowire="default"
None.gif        dependency-check
="default">
None.gif        
<property name="address">
None.gif            
<value>湖北 武汉a</value>
None.gif        
</property>
None.gif    
</bean>
None.gif        
<bean id="user" class="fengyan.User" abstract="false"
None.gif            singleton
="true" lazy-init="default" autowire="byName"
None.gif            dependency-check
="default">
None.gif            
<property name="userName">
None.gif                
<value>efly</value>
None.gif            
</property>
None.gif            
<property name="myhome">
None.gif                
<list>
None.gif                    
<ref bean="home" />
None.gif                    
<ref bean="myhome" />
None.gif                
</list>
None.gif            
</property>
None.gif            
<property name="myhomeList">
None.gif                
<list>
None.gif                    
<ref bean="myhome" />
None.gif                    
<value>HAHAXIXItest</value>
None.gif                    
<ref bean="home" />
None.gif                
</list>
None.gif            
</property>
None.gif            
<property name="myhomeSet">
None.gif                
<set>
None.gif                    
<ref bean="myhome" />
None.gif                    
<value>setvalue</value>
None.gif                
</set>
None.gif            
</property>
None.gif            
<property name="myhomeMap">
None.gif                
<map>
None.gif                    
<entry key="t1">
None.gif                        
<ref bean="myhome" />
None.gif                    
</entry>
None.gif                    
<entry key="t2" value="mapTest"></entry>
None.gif                
</map>
None.gif            
</property></bean>
None.gif
None.gif
</beans>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值