首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

spring集合注入与scope有关问题

2012-03-18 
spring集合注入与scope问题Java codepublic class User {private int idprivate String namepublic int

spring集合注入与scope问题

Java code
public class User {    private int id;    private String name;        public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }}


Java code
public class UserService {    private Set<User> userSet = new HashSet<User>();    private List<User> userList = new ArrayList<User>();    private Map<String,User> userMap = new HashMap<String,User>();        public Set<User> getUserSet() {        return userSet;    }    public void setUserSet(Set<User> userSet) {        this.userSet = userSet;    }    public List<User> getUserList() {        return userList;    }    public void setUserList(List<User> userList) {        this.userList = userList;    }    public Map<String, User> getUserMap() {        return userMap;    }    public void setUserMap(Map<String, User> userMap) {        this.userMap = userMap;    }    public UserService(){            }    }


XML code
<bean name="user" class="com.hiway.entity.User" scope="prototype">        <property name="id" value="123"></property>        <property name="name" value="Hiway"></property>    </bean>      <bean name="userService" class="com.hiway.entity.UserService" scope="prototype">        <property name="userSet">            <set>                <ref bean="user"/>                <ref bean="user"/>                <ref bean="user"/>            </set>        </property>        <property name="userList">            <list>                <ref bean="user"/>                <ref bean="user"/>                <ref bean="user"/>            </list>        </property>                <property name="userMap">            <map>                <entry key="1">                    <ref bean="user"/>                </entry>                <entry key="2">                    <ref bean="user"/>                </entry>                <entry key="3">                    <ref bean="user"/>                </entry>            </map>        </property>    </bean>


测试类:
Java code
UserService service = (UserService) context.getBean("userService");                System.out.println("userSet:===================");        Iterator it = service.getUserSet().iterator();        while(it.hasNext()){            User u = (User) it.next();            System.out.println(u);        }                System.out.println("userList:=================");        it = service.getUserList().iterator();        while(it.hasNext()){            User u = (User) it.next();            System.out.println(u);        }                System.out.println("userMap:==============");        it = service.getUserMap().entrySet().iterator();        while(it.hasNext()){            System.out.println(it.next());        }



问题:我已经把com.hiway.entity.User的scope设置为prototype,在userSet里加了三个ref,可是为什么只打印出一个?
其中一次打印结果:
userSet:===================
com.hiway.entity.User@1fe88d
userList:=================
com.hiway.entity.User@1d36dfe
com.hiway.entity.User@1da669c
com.hiway.entity.User@186c730
userMap:==============
1=com.hiway.entity.User@17f242c
2=com.hiway.entity.User@1fd5e2
3=com.hiway.entity.User@12f9ee

[解决办法]
HashSet应该是用hashCode()和equals()比较对象是否相等

在User对象中你没有实现这两个方法,所以你的3个User对象是相等的
[解决办法]
他的ref是根据name去取的吧 你把名字换一下试试撒

热点排行