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程序设计有所帮助。

(0)

相关推荐

  • spring动态bean注册示例分享

    1.在一些特殊的场景中需要动态向spring注册bean2.spring版本2.5.6 复制代码 代码如下: public class ServiceServiceImpl implements ServiceService, ApplicationContextAware { @Override public void setApplicationContext(org.springframework.context.ApplicationContext applicationContext)

  • 解析Java中如何获取Spring中配置的bean

    一.什么是Spring?Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架 二.如何在程序中获取Spring配置的bean呢?方法一:在初始化时保存ApplicationContext对象代码: 复制代码 代码如下: ApplicationContext ac = new FileSystemXmlApplicationContex("applicationContext.xml");    ac.getBean("beanId"); 说明:

  • 通过spring用beanshell实现java接口示例

    说明 1.通过脚本语言让JAVA执行动态代码2.用Spring可以将脚本语言代理成Java接口的实现类3.Spring2.5.6中支持三种脚本语言ruby,Groovy,BeanShell4.示例中为spring与beanshell结合5.依赖spring2.5.6,bsh-2.0b4 复制代码 代码如下: import org.junit.Test;import org.springframework.scripting.bsh.BshScriptUtils; import bsh.EvalE

  • spring实例化javabean的三种方式分享

    第一种:直接配置javabean文件 bean.xml 复制代码 代码如下: <bean id="sayhello" class="test.service.impl.HelloBean"/> personDao.java 复制代码 代码如下: package springdao;public class personDao { private String name; private String dep; public String getName(

  • 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 Boot 整合 Reactor实例详解

    目录 引言 1 创建项目 2 集成 H2 数据库 3 创建测试类 3.1 user 实体 3.2 UserRepository 3.3 UserService 3.4 UserController 3.5 SpringReactorApplication 添加注解支持 测试 总结 引言 Reactor 是一个完全非阻塞的 JVM 响应式编程基础,有着高效的需求管理(背压的形式).它直接整合 Java8 的函数式 API,尤其是 CompletableFuture, Stream,还有 Durat

  • Spring boot 使用mysql实例详解

    Spring boot 使用mysql实例详解 开发阶段用 H2即可,上线时,通过以下配置切换到mysql,spring boot将使用这个配置覆盖默认的H2. 1.建立数据库: mysql -u root CREATE DATABASE springbootdb 2.pom.xml: <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId&g

  • Spring MVC的文件下载实例详解

    Spring MVC的文件下载实例详解 读取文件 要下载文件,首先是将文件内容读取进来,使用字节数组存储起来,这里使用spring里面的工具类实现 import org.springframework.util.FileCopyUtils; public byte[] downloadFile(String fileName) { byte[] res = new byte[0]; try { File file = new File(BACKUP_FILE_PATH, fileName); i

  • Android activity堆栈及管理实例详解

    本示例演示如何通过设置Intent对象的标记,来改变当前任务堆栈中既存的Activity的顺序. 1. Intent对象的Activity启动标记说明: FLAG_ACTIVITY_BROUGHT_TO_FRONT 应用程序代码中通常不设置这个标记,而是由系统给单任务启动模式的Activity的设置. FLAG_ACTIVITY_CLEAR_TASK 如果给Intent对象添加了这个标记,那么在Activity被启动之前,会导致跟这个Activity关联的任何既存的任务都被清除.也就是说新的Ac

  • Android 十六进制状态管理实例详解

    目录 背景 示例 实现思路 代码测试 十六进制 总结 背景 最近需要实现一个状态管理类: 在多种场景下,控制一系列的按钮是否可操作. 不同场景下,在按钮不可操作的时候,点击弹出对应的Toast. 随着场景数量的增加,这个管理类的实现,就可能会越来越复杂. 刚好看到大佬的文章,顺便学习和实践一下.参考学习:就算不去火星种土豆,也请务必掌握的 Android 状态管理最佳实践 示例 还是用大佬那个例子. 例如,存在 3 种模式,和 3个按钮,按钮不可用的时候弹出对应的 Toast. 模式 A 下,要

  • Spring中的事务管理实例详解

    本文实例讲述了Spring中的事务管理.分享给大家供大家参考.具体分析如下: 事务简介: 事务管理是企业级应用程序开发中必不可少的技术,用来确保数据的完整性和一致性 事务就是一系列的动作,它们被当作一个单独的工作单元.这些动作要么全部完成,要么全部不起作用 事务的四个关键属性(ACID) ① 原子性(atomicity):事务室一个原子操作,有一系列动作组成.事务的原子性确保动作要么全部完成,要么完全不起作用 ② 一致性(consistency):一旦所有事务动作完成,事务就被提交.数据和资源就

  • java Spring MVC4环境搭建实例详解(步骤)

    spring WEB MVC框架提供了一个MVC(model-view-controller)模型-视图-控制器的结构和组件,利用它可以开发更灵活.松耦合的web应用.MVC模式使得整个服务应用的各部分(控制逻辑.业务逻辑.UI界面展示)分离开来,使它们之间的耦合性更低. Model 模型层封装了整个应用程序的数据对象并且将会持久化POJO View 视图层负责渲染模型层的数据,一般最终使用HTML展示到用户浏览器或移动设备终端 Controller 控制层负责处理用户的请求.构建合适的模型数据

  • spring mvc高级技术实例详解

    Spring MVC高级技术包括但不限于web.xml配置.异常处理.跨重定向请求传递数据 1.web.xml文件的配置 <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <context-param> <

  • spring 集成 mybatis的实例详解

    环境配置 1>先创建maven的quickstart项目;并且创建dao层,service层,controller层,po层,mapper,resources以及下面的配置文件(db.properties,log4j.properties,mybatis.xml,spring.xml). 2>配置pom.xml ​ 修改jdk版本; ​ 添加依赖: ​ junit版本改为4.12;spring-context;spring-test;spring-jdbc;spring-tx(事务);aspe

随机推荐