Spring 中的内部bean 和集合

简介:

在Spring中所谓的内部bean(inner bean)是指一个bean 的<property/>或<constructor-arg/>元素中使用<bean/>元素定义的bean.内部bean 定义不需要有id或name属性,即使指定id或name属性值也将会被容器忽略.


在Spring中通过<list/>,<set/>, <map/>及<props/>元素可以定义和设置与Java Collection 类型对应List, Set ,Map 及Properties的值.

以下是个关于内部bean和集合的例子.

applicationContext.xml文件:
======================================================<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns=" http://www.springframework.org/schema/beans "
xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance "
xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd ">
<!--
  注:如果此处是Action的对象,则只能用name而不能用id
-->
<bean name="/login" class="action.LoginAction">
  <property name="loginBiz">
   <ref local="loginBiz" />
  </property>
</bean>
<bean id="loginBiz" class="biz.LoginImpl">
  <property name="haha">
   <!--
    对应的haha在biz.LoginImpl类中为数组(注:如果属性为List则在applicationContext.xml文件中也应用list节点)
   -->
   <list>
    <value>aa</value>
    <value>bb</value>
    <value>cc</value>
    <value>dd</value>
   </list>
  </property>
  <property name="h">
   <!--
    此处为内部bean,即h的类型为biz.ha类型的引用
   -->
   <bean class="biz.ha">
    <!--
     biz.ha类中有三个属性,分别为name(String类型),age(int类型)和map(Map类型)
    -->
    <property name="name" value="李四" />
    <property name="age" value="55" />
    <property name="map">
     <!--
      map在biz.ha类中我Map集合
     -->
     <map>
      <!--
       每一个entry为一个Map元素
      -->
      <entry>
       <key>
        <value>hehe</value>
       </key>
       <value>hei</value>
      </entry>
     </map>
    </property>
   </bean>
  </property>
  <!--
   <constructor-arg type="java.lang.String">
   <value>张三</value>
   </constructor-arg>
  -->
  <constructor-arg index="0">
   <value>张三</value>
  </constructor-arg>
  <!--
   <constructor-arg type="int">
   <value>55</value>
   </constructor-arg>
  -->
  <constructor-arg index="1">
   <value>55</value>
  </constructor-arg>
</bean>
</beans>

=================================================

LoginAction类中的代码
=================================================

/*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import biz.ILoginBiz;
import form.LoginForm;
public class LoginAction extends Action {

private ILoginBiz loginBiz;

public ILoginBiz getLoginBiz() {
  return loginBiz;
}
public void setLoginBiz(ILoginBiz loginBiz) {
  this.loginBiz = loginBiz;
}
public ActionForward execute(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response) {
  LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method stub
  System.out.println("haha 我己在action中了哈...");
  loginBiz.login();
  return null;
}
}

======================================

业务层(biz)中的ILoginBiz接口
======================================

package biz;
public interface ILoginBiz {
public void login();
}

======================================

业务层(biz)中实同ILoginBiz接口的LoginImpl类
======================================
package biz;
public class LoginImpl implements ILoginBiz {
public LoginImpl() {
}
private ha h;/////////////////////////////////////////////////////依赖下一个类呐....
public LoginImpl(String name, int age) {
  System.out.println("我的名称:" + name + "我的年龄:" + age);
}
private String haha[];
public void login() {
  System.out.println("haha me is 在业务层中呐。。。快来找我呐。。。哈哈。。。");
  System.out.println("我的数组中有" + haha.length + "个数....哈哈。。。");
  System.out.println("我是内部bean呐..不错!!!"+"我的名字叫:"+h.getName()+"嘿嘿...不好意思哈....");
  System.out.println("嘿嘿...我是Map呐..你好么?嘿嘿.."+h.getMap().get("hehe"));
}
public String[] getHaha() {
  return haha;
}
public void setHaha(String[] haha) {
  this.haha = haha;
}
public ha getH() {
  return h;
}
public void setH(ha h) {
  this.h = h;
}
}
=================================
LoginImpl类中h属性所依赖的类
=================================
package biz;
import java.util.Map;
public class ha {
private String name;
private int age;
private Map map;
public int getAge() {
  return age;
}
public void setAge(int age) {
  this.age = age;
}
public String getName() {
  return name;
}
public void setName(String name) {
  this.name = name;
}
public Map getMap() {
  return map;
}
public void setMap(Map map) {
  this.map = map;
}

}



本文转自左正博客园博客,原文链接:http://www.cnblogs.com/soundcode/archive/2010/12/20/1911899.html,如需转载请自行联系原作者

目录
相关文章
|
7月前
|
XML Java 测试技术
Spring IOC—基于注解配置和管理Bean 万字详解(通俗易懂)
Spring 第三节 IOC——基于注解配置和管理Bean 万字详解!
487 26
|
9月前
|
XML 安全 Java
|
9月前
|
存储 Java Spring
【Spring】获取Bean对象需要哪些注解
@Conntroller,@Service,@Repository,@Component,@Configuration,关于Bean对象的五个常用注解
179 12
|
9月前
|
存储 Java 应用服务中间件
【Spring】IoC和DI,控制反转,Bean对象的获取方式
IoC,DI,控制反转容器,Bean的基本常识,类注解@Controller,获取Bean对象的常用三种方式
216 12
|
9月前
|
XML Java 数据格式
Spring容器Bean之XML配置方式
通过对以上内容的掌握,开发人员可以灵活地使用Spring的XML配置方式来管理应用程序的Bean,提高代码的模块化和可维护性。
241 6
|
9月前
|
XML Java 数据格式
🌱 深入Spring的心脏:Bean配置的艺术与实践 🌟
本文深入探讨了Spring框架中Bean配置的奥秘,从基本概念到XML配置文件的使用,再到静态工厂方式实例化Bean的详细步骤,通过实际代码示例帮助读者更好地理解和应用Spring的Bean配置。希望对你的Spring开发之旅有所助益。
416 4
|
9月前
|
安全 Java 开发者
Spring容器中的bean是线程安全的吗?
Spring容器中的bean默认为单例模式,多线程环境下若操作共享成员变量,易引发线程安全问题。Spring未对单例bean做线程安全处理,需开发者自行解决。通常,Spring bean(如Controller、Service、Dao)无状态变化,故多为线程安全。若涉及线程安全问题,可通过编码或设置bean作用域为prototype解决。
163 1
|
Java 开发者 Spring
解析Spring中Bean的生命周期
解析Spring中Bean的生命周期
145 2
|
XML druid Java
Spring5系列学习文章分享---第二篇(IOC的bean管理factory+Bean作用域与生命周期+自动装配+基于注解管理+外部属性管理之druid)
Spring5系列学习文章分享---第二篇(IOC的bean管理factory+Bean作用域与生命周期+自动装配+基于注解管理+外部属性管理之druid)
162 0
|
11月前
|
Java 开发者 Spring
Spring bean的生命周期详解!
本文详细解析Spring Bean的生命周期及其核心概念,并深入源码分析。Spring Bean是Spring框架的核心,由容器管理其生命周期。从实例化到销毁,共经历十个阶段,包括属性赋值、接口回调、初始化及销毁等。通过剖析`BeanFactory`、`ApplicationContext`等关键接口与类,帮助你深入了解Spring Bean的管理机制。希望本文能助你更好地掌握Spring Bean生命周期。
824 1