Spring实战之容器中的工程Bean用法示例

本文实例讲述了Spring容器中的工程Bean用法。分享给大家供大家参考,具体如下:

一 配置

<?xml version="1.0" encoding="GBK"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://www.springframework.org/schema/beans"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
   <!-- 下面配置相当于如下代码:
   FactoryBean factory = new org.crazyit.app.factory.GetFieldFactoryBean();
   factory.setTargetClass("java.awt.BorderLayout");
   factory.setTargetField("NORTH");
   north = factory.getObject(); -->
   <bean id="north" class="org.crazyit.app.factory.GetFieldFactoryBean">
      <property name="targetClass" value="java.awt.BorderLayout"/>
      <property name="targetField" value="NORTH"/>
   </bean>
   <!-- 下面配置相当于如下代码:
   FactoryBean factory = new org.crazyit.app.factory.GetFieldFactoryBean();
   factory.setTargetClass("java.sql.ResultSet");
   factory.setTargetField("TYPE_SCROLL_SENSITIVE");
   north = factory.getObject(); -->
   <bean id="theValue" class="org.crazyit.app.factory.GetFieldFactoryBean">
      <property name="targetClass" value="java.sql.ResultSet"/>
      <property name="targetField" value="TYPE_SCROLL_SENSITIVE"/>
   </bean>
</beans>

二 Bean工厂

package org.crazyit.app.factory;
import java.lang.reflect.*;
import org.springframework.beans.factory.FactoryBean;
public class GetFieldFactoryBean implements FactoryBean<Object>
{
  private String targetClass;
  private String targetField;
  // targetClass的setter方法
  public void setTargetClass(String targetClass)
  {
    this.targetClass = targetClass;
  }
  // targetField的setter方法
  public void setTargetField(String targetField)
  {
    this.targetField = targetField;
  }
  // 返回工厂Bean所生产的产品
  public Object getObject() throws Exception
  {
    Class<?> clazz = Class.forName(targetClass);
    Field field = clazz.getField(targetField);
    return field.get(null);
  }
  // 获取工厂Bean所生产的产品的类型
  public Class<? extends Object> getObjectType()
  {
    return Object.class;
  }
  // 返回该工厂Bean所生成的产品是否为单例
  public boolean isSingleton()
  {
    return false;
  }
}

三 测试类

package lee;
import org.springframework.context.*;
import org.springframework.context.support.*;
public class SpringTest
{
  public static void main(String[] args)throws Exception
  {
    ApplicationContext ctx = new
      ClassPathXmlApplicationContext("beans.xml");
    // 下面2行代码获取的FactoryBean的产品
    System.out.println(ctx.getBean("north"));
    System.out.println(ctx.getBean("theValue"));
    // 下面代码可获取的FactoryBean本身
    System.out.println(ctx.getBean("&theValue"));
  }
}

四 测试结果

North
1005
org.crazyit.app.factory.GetFieldFactoryBean@56ac3a89

五 说明

java.awt.BorderLayout定义如下

public class BorderLayout implements LayoutManager2,
                   java.io.Serializable {
  /**
   * The north layout constraint (top of container).
   */
  public static final String NORTH = "North";
}

java.sql.ResultSet定义如下

public interface ResultSet extends Wrapper, AutoCloseable {
  int TYPE_SCROLL_SENSITIVE = 1005;
}

更多关于java相关内容感兴趣的读者可查看本站专题:《Spring框架入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

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

(0)

相关推荐

  • Spring实战之调用实例工厂方法创建Bean操作示例

    本文实例讲述了Spring实战之调用实例工厂方法创建Bean操作.分享给大家供大家参考,具体如下: 一 配置 <?xml version="1.0" encoding="GBK"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" x

  • 使用监听器对Spring bean id进行唯一校验过程解析

    背景 项目中用到了多数据源,不同的数据源根据业务不同配置在不同的工程中,由maven来统一聚合.但是前几天在开发过程中突然发现项目前台工程的事务配置不起作用了,在之前明明测试过事务功能,当时是生效的. 然后检查了一下配置文件中事务部分的配置,发现没什么改动.为了排除其它因素的干扰,采用了单元测试重新测试了一次,结果发现当前数据源事务正常.根据这个分析可能是当前的事务配置被其它配置干扰了,仔细检查了一下后发现罪魁祸首是另外的一个数据源事务配置(在另外的一个配置文件中)的bean id名称和当前的事

  • Spring的自动装配Bean的三种方式

    spring的自动装配功能的定义:无须在Spring配置文件中描述javaBean之间的依赖关系(如配置<property>.<constructor-arg>).IOC容器会自动建立javabean之间的关联关系. 如果没有采用自动装配的话,手动装配我们通常在配置文件中进行实现:一下代码就是手动装配: <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="ht

  • Spring实战之注入嵌套Bean操作示例

    本文实例讲述了Spring实战之注入嵌套Bean操作.分享给大家供大家参考,具体如下: 一 配置 <?xml version="1.0" encoding="GBK"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:sch

  • Spring实战之使用静态工厂方法创建Bean操作示例

    本文实例讲述了Spring实战之使用静态工厂方法创建Bean操作.分享给大家供大家参考,具体如下: 一 配置 <?xml version="1.0" encoding="GBK"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" x

  • spring中bean id相同引发故障的分析与解决

    前言 最近因为同事bean配置的问题导致生产环境往错误的redis实例写入大量的数据,差点搞挂redis.经过快速的问题定位,发现是同事新增一个redis配置文件,并且配置的RedisSentinelConfiguration的id是一样的,然后在使用@Autowired注入bean的时候因为spring bean覆盖的机制导致读取的redis配置不是原来的. 总结起来,有两点问题: 为什么相同bean id的bean会被覆盖 @Autowired注解不是按照byType的方式进行注入的吗 代码

  • Spring实战之抽象Bean和子Bean定义与用法示例

    本文实例讲述了Spring实战之抽象Bean和子Bean定义与用法.分享给大家供大家参考,具体如下: 一 配置 <?xml version="1.0" encoding="GBK"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans"

  • Java类获取Spring中bean的5种方式

    获取Spring中的bean有很多种方式,再次总结一下: 第一种:在初始化时保存ApplicationContext对象 ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml"); ac.getBean("beanId"); 说明:这种方式适用于采用Spring框架的独立应用程序,需要程序通过配置文件手工初始化Spring. 第二种:通过Spring提供

  • Spring实战之获得Bean本身的id操作示例

    本文实例讲述了Spring实战之获得Bean本身的id操作.分享给大家供大家参考,具体如下: 一 配置 <?xml version="1.0" encoding="GBK"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:

  • Spring如何使用注解的方式创建bean

    这篇文章主要介绍了Spring如何使用注解的方式创建bean,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 第一种使用配置类的方式 1.创建一个bean package com.springbean; public class Person { private String name; private Integer age ; public Person(String name, Integer age) { this.name = name

随机推荐