Spring Bean基本管理实例详解

 更新时间:2015年10月20日 14:21:53   作者:hacker0825  
这篇文章主要介绍了Spring Bean基本管理,以实例形式较为详细的分析了Spring Bean的相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例讲述了Spring Bean基本管理。分享给大家供大家参考,具体如下:

一、使用setter方式完成依赖注入

下面是Bean和beans-config.xml文件。

public class HelloBean { 
  private String helloWord; 
  //...省略getter、setter方法   
}

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" 
"http://www.springframework.org/dtd/spring-beans.dtd"> 
<beans> 
  <bean id="helloBean" 
     class="onlyfun.caterpillar.HelloBean"> 
    <property name="helloWord"> 
      <value>Hello!Justin!</value> 
    </property> 
  </bean> 
</beans>
public class SpringDemo { 
  public static void main(String[] args) { 
    Resource rs = new FileSystemResource("beans-config.xml"); 
    BeanFactory factory = new XmlBeanFactory(rs); 
    HelloBean hello = (HelloBean) factory.getBean("helloBean"); 
    System.out.println(hello.getHelloWord()); 
  } 
}

二、使用constructor方式完成注入

public class HelloBean { 
  private String name; 
  private String helloWord; 
  // 建议有要无参数建构方法 
  public HelloBean() { 
  } 
  public HelloBean(String name, String helloWord) { 
    this.name = name; 
    this.helloWord = helloWord; 
  } 
  //...省略getter、setter方法   
}

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" 
"http://www.springframework.org/dtd/spring-beans.dtd"> 
<beans> 
  <bean id="helloBean" 
     class="onlyfun.caterpillar.HelloBean"> 
    <constructor-arg index="0"> 
      <value>Justin</value> 
    </constructor-arg> 
    <constructor-arg index="1"> 
      <value>Hello</value> 
    </constructor-arg> 
  </bean> 
</beans>

public class SpringDemo { 
  public static void main(String[] args) { 
    ApplicationContext context = 
      new FileSystemXmlApplicationContext("beans-config.xml"); 
    HelloBean hello = (HelloBean) context.getBean("helloBean"); 
    System.out.print("Name: "); 
    System.out.println(hello.getName()); 
    System.out.print("Word: "); 
    System.out.println(hello.getHelloWord()); 
  } 
}

三、属性参考

public class HelloBean { 
  private String helloWord; 
  private Date date; 
  //...省略getter、setter方法   
}

<beans> 
  <bean id="dateBean" class="java.util.Date"/> 
  <bean id="helloBean" class="onlyfun.caterpillar.HelloBean"> 
    <property name="helloWord"> 
      <value>Hello!</value> 
    </property> 
    <property name="date"> 
      <ref bean="dateBean"/> 
    </property> 
  </bean> 
</beans>
public class SpringDemo { 
  public static void main(String[] args) { 
    ApplicationContext context = 
      new FileSystemXmlApplicationContext("beans-config.xml"); 
    HelloBean hello = (HelloBean) context.getBean("helloBean"); 
    System.out.print(hello.getHelloWord()); 
    System.out.print(" It's "); 
    System.out.print(hello.getDate()); 
    System.out.println("."); 
  } 
}

四、“byType”自动绑定

将“三”中的配置文件改为下面,即可完成bean属性的按类型自动绑定。

<beans> 
  <bean id="dateBean" class="java.util.Date"/> 
  <bean id="helloBean" class="onlyfun.caterpillar.HelloBean" autowire="byType"> 
    <property name="helloWord"> 
      <value>Hello!</value> 
    </property> 
  </bean> 
</beans>

五、“byName”自动绑定

将“三”中的配置文件改为下面,即可完成bean属性的按名称自动绑定。

<beans> 
  <bean id="dateBean" class="java.util.Date"/> 
  <bean id="helloBean" class="onlyfun.caterpillar.HelloBean" autowire="byName"> 
    <property name="helloWord"> 
      <value>Hello!</value> 
    </property> 
  </bean> 
</beans>

六、“constructor”自动绑定

将“三”中的配置文件改为下面,即可完成bean属性的按构造方法自动绑定。在建立依赖关系时,Srping容器会试图比对容器中的Bean实例类型,及相关的构造方法上的参数类型,看看在类型上是否符合,如果有的话,则选用该构造方法来建立Bean实例。如果无法绑定,则抛出org.springframework.beans.factory.UnsatisfiedDependencyException异常。

<beans> 
  <bean id="dateBean" class="java.util.Date"/> 
  <bean id="helloBean" class="onlyfun.caterpillar.HelloBean" autowire="constructor"> 
    <property name="helloWord"> 
      <value>Hello!</value> 
    </property> 
  </bean> 
</beans>

六、“autodetect”自动绑定

将“三”中的配置文件改为下面,即可完成bean属性的自动绑定,这个自动绑定是Spring会尝试用入constructor来处理依赖关系的建立,如果不行,则再尝试用byType类建立依赖关系。

<beans> 
  <bean id="dateBean" class="java.util.Date"/> 
  <bean id="helloBean" class="onlyfun.caterpillar.HelloBean" autowire="autodetect"> 
    <property name="helloWord"> 
      <value>Hello!</value> 
    </property> 
  </bean> 
</beans>

七、依赖检查方式

在自动绑定中,由于没办法从定义文件中,清楚地看到是否每个属性都完成设定,为了确定某些依赖关系确实建立,您可以假如依赖检查,在<bean>标签使用时设定"dependency-check",可以有四种依赖检查方式:simple、objects、all、none。

simple:只检查简单的类型(像原生数据类型或字符串对象)属性是否完成依赖关系,。
objects:检查对象类型的属性是否完成依赖关系。
all:则检查全部的属性是否完成依赖关系。
none:设定是默认值,表示不检查依赖性。

<beans> 
  <bean id="dateBean" class="java.util.Date"/> 
  <bean id="helloBean" class="onlyfun.caterpillar.HelloBean" autowire="autodetect" dependeny-check="all"> 
    <property name="helloWord"> 
      <value>Hello!</value> 
    </property> 
  </bean> 
</beans>

八、集合对象注入

对于像数组、List、Set、Map等集合对象,在注入前必须填充一些对象至集合中,然后再将集合对象注入至所需的Bean时,也可以交由Spring的IoC容器来自动维护或生成集合对象,并完成依赖注入。

public class SomeBean { 
  private String[] someStrArray; 
  private Some[] someObjArray; 
  private List someList; 
  private Map someMap; 
  public String[] getSomeStrArray() { 
    return someStrArray; 
  } 
  public void setSomeStrArray(String[] someStrArray) { 
    this.someStrArray = someStrArray; 
  } 
  public Some[] getSomeObjArray() { 
    return someObjArray; 
  } 
  public void setSomeObjArray(Some[] someObjArray) { 
    this.someObjArray = someObjArray; 
  } 
  public List getSomeList() { 
    return someList; 
  } 
  public void setSomeList(List someList) { 
    this.someList = someList; 
  } 
  public Map getSomeMap() { 
    return someMap; 
  } 
  public void setSomeMap(Map someMap) { 
    this.someMap = someMap; 
  } 
}
public class Some { 
  private String name; 
  public String getName() { 
    return name; 
  } 
  public void setName(String name) { 
    this.name = name; 
  } 
  public String toString() { 
    return name; 
  } 
}

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" 
"http://www.springframework.org/dtd/spring-beans.dtd"> 
<beans> 
  <bean id="some1" class="onlyfun.caterpillar.Some"> 
    <property name="name"> 
      <value>Justin</value> 
    </property> 
  </bean> 
  <bean id="some2" class="onlyfun.caterpillar.Some"> 
    <property name="name"> 
      <value>momor</value> 
    </property> 
  </bean> 
  <bean id="someBean" class="onlyfun.caterpillar.SomeBean"> 
    <property name="someStrArray"> 
      <list> 
        <value>Hello</value> 
        <value>Welcome</value> 
      </list> 
    </property> 
    <property name="someObjArray"> 
      <list> 
         <ref bean="some1"/> 
         <ref bean="some2"/> 
      </list> 
    </property> 
    <property name="someList"> 
      <list> 
         <value>ListTest</value> 
         <ref bean="some1"/> 
         <ref bean="some2"/> 
      </list> 
    </property> 
    <property name="someMap"> 
      <map> 
         <entry key="MapTest"> 
           <value>Hello!Justin!</value> 
         </entry> 
         <entry key="someKey1"> 
           <ref bean="some1"/> 
         </entry> 
      </map> 
    </property> 
  </bean> 
</beans>

public class SpringDemo { 
  public static void main(String[] args) { 
    ApplicationContext context = 
      new FileSystemXmlApplicationContext( 
          "beans-config.xml"); 
    SomeBean someBean = 
      (SomeBean) context.getBean("someBean"); 
    // 取得数组型态依赖注入对象 
    String[] strs = 
      (String[]) someBean.getSomeStrArray(); 
    Some[] somes = 
      (Some[]) someBean.getSomeObjArray(); 
    for(int i = 0; i < strs.length; i++) { 
      System.out.println(strs[i] + "," 
          + somes[i].getName()); 
    } 
    // 取得List型态依赖注入对象 
    System.out.println(); 
    List someList = (List) someBean.getSomeList(); 
    for(int i = 0; i < someList.size(); i++) { 
      System.out.println(someList.get(i)); 
    } 
    // 取得Map型态依赖注入对象 
    System.out.println(); 
    Map someMap = (Map) someBean.getSomeMap(); 
    System.out.println(someMap.get("MapTest")); 
    System.out.println(someMap.get("someKey1")); 
  } 
}

希望本文所述对大家Java程序设计有所帮助。

相关文章

  • 解决springboot接入springfox-swagger2遇到的一些问题

    解决springboot接入springfox-swagger2遇到的一些问题

    这篇文章主要介绍了解决springboot接入springfox-swagger2遇到的一些问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • 如何解决SpringMVC不能访问html页面

    如何解决SpringMVC不能访问html页面

    这篇文章主要介绍了如何解决SpringMVC不能访问html页面问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • Hystrix Turbine聚合监控的实现详解

    Hystrix Turbine聚合监控的实现详解

    微服务架构下,⼀个微服务往往部署多个实例,如果每次只能查看单个实例的监控,就需要经常切换很不⽅便,在这样的场景下,我们可以使⽤ Hystrix Turbine 进⾏聚合监控,它可以把相关微服务的监控数据聚合在⼀起,便于查看
    2022-09-09
  • eclipse 如何创建 user library 方法详解

    eclipse 如何创建 user library 方法详解

    这篇文章主要介绍了eclipse 如何创建 user library 方法详解的相关资料,需要的朋友可以参考下
    2017-04-04
  • 在Java中如何避免创建不必要的对象

    在Java中如何避免创建不必要的对象

    作为Java开发者,我们每天创建很多对象,但如何才能避免创建不必要的对象呢?这需要我们好好学习,这篇文章主要给大家介绍了关于在Java中如何避免创建不必要对象的相关资料,需要的朋友可以参考下
    2021-10-10
  • Spark SQL配置及使用教程

    Spark SQL配置及使用教程

    SparkSQL是spark的一个模块,主入口是SparkSession,将SQL查询与Spark程序无缝混合,这篇文章主要介绍了Spark SQL配置及使用,需要的朋友可以参考下
    2021-12-12
  • 源码分析Java中ThreadPoolExecutor的底层原理

    源码分析Java中ThreadPoolExecutor的底层原理

    这篇文章主要带大家从源码分析一下Java中ThreadPoolExecutor的底层原理,文中的示例代码讲解详细,具有一定的学习价值,需要的可以参考一下
    2023-05-05
  • SpringCloud hystrix服务降级概念介绍

    SpringCloud hystrix服务降级概念介绍

    什么是服务降级?当服务器压力剧增的情况下,根据实际业务情况及流量,对一些服务和页面有策略的不处理或换种简单的方式处理,从而释放服务器资源以保证核心交易正常运作或高效运作
    2022-09-09
  • 关于Java 项目封装sqlite连接池操作持久化数据的方法

    关于Java 项目封装sqlite连接池操作持久化数据的方法

    这篇文章主要介绍了Java 项目封装sqlite连接池操作持久化数据的方法,文中给大家介绍了sqlite的体系结构及封装java的sqlite连接池的详细过程,需要的朋友可以参考下
    2021-11-11
  • Maven项目读取resources文件路径问题解决方案

    Maven项目读取resources文件路径问题解决方案

    这篇文章主要介绍了Maven项目读取resources文件路径问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09

最新评论