项目中用到需要初始化一些数据,Spring提供了filed的值注入和method的返回值注入。

一、Field值的注入

filed值注入需要使用org.springframework.beans.factory.config.FieldRetrievingFactoryBean来获取类的静态变量。

例如,我们通常在接口中定义常量:

Java代码  
  1. package com.wy.inject;
  2. /**
  3. *
  4. * @author wy
  5. *
  6. */
  7. public interface Fruit {
  8. public String APPLE = "苹果";
  9. public String ORANGE = "桔子";
  10. }

下面利用FieldRetrievingFactoryBean获取CarBandType接口中定义的常量,并注入到某个bean的属性中:

Xml代码  
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:task="http://www.springframework.org/schema/task"
  4. xsi:schemaLocation="http://www.springframework.org/schema/context
  5. http://www.springframework.org/schema/context/spring-context-3.1.xsd
  6. http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
  8. http://www.springframework.org/schema/task
  9. http://www.springframework.org/schema/task/spring-task-3.1.xsd">
  10. <!-- 1、通过注入属性
  11. <bean id="appleBean" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">
  12. <property name="staticField" value="com.wy.inject.Fruit.APPLE" />
  13. </bean>
  14. <bean id="apple" class="com.wy.inject.Apple">
  15. <property name="name" ref="appleBean" />
  16. </bean>-->

Spring还允许用户用常量的全限定名作为FieldRetrievingFactoryBean的id,其效果和通过配置staticField属性是一样的:

Xml代码  
  1. <!-- 2、通过全限量名称
  2. <bean id="com.wy.inject.Fruit.APPLE" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">
  3. </bean>
  4. <bean id="apple" class="com.wy.inject.Apple">
  5. <property name="name" ref="com.wy.inject.Fruit.APPLE" />
  6. </bean> -->

当然,也可以直接将FieldRetrievingFactoryBean以内置bean的方式对属性进行赋值,这样在配置上更紧凑一些:

Xml代码  
  1. <!-- 3、通过内置Bean的方式
  2. <bean id="apple" class="com.wy.inject.Apple">
  3. <property name="name">
  4. <bean id="com.wy.inject.Fruit.APPLE" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean"/>
  5. </property>
  6. </bean>-->

二、Method返回值的注入
Method返回值的注入需要使用MethodInvokingFactoryBean来完成。

在xml配置中,需要设定targetObject和targetMethod来指定目标bean和方法。如果使用静态方法,则需要指定targetClass和targetMethod。

1、非静态方法配置文件如下:

Xml代码  
  1. <!-- 1、Method返回值的注入
  2. <bean id="apple" class="com.wy.inject.Apple">
  3. <property name="name">
  4. <bean
  5. class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
  6. <property name="targetObject">
  7. <ref local="cons" />
  8. </property>
  9. <property name="targetMethod">
  10. <value>getAPPLE</value>
  11. </property>
  12. </bean>
  13. </property>
  14. </bean>
  15. <bean id="cons" class="com.wy.inject.Cons" /> -->

2、静态方法的配置

Xml代码  
  1. <!-- 2、静态方法返回值的注入 -->
  2. <bean id="banna" class="com.wy.inject.Banna">
  3. <property name="name">
  4. <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
  5. <property name="targetClass">
  6. <value>com.wy.inject.Cons</value>
  7. </property>
  8. <property name="targetMethod">
  9. <!-- getBann必须是静态方法 -->
  10. <value>getBann</value>
  11. </property>
  12. </bean>
  13. </property>
  14. </bean>

涉及到的类:

Apple.java

Java代码  
  1. package com.wy.inject;
  2. /**
  3. *
  4. * @author wy
  5. *
  6. */
  7. public class Apple {
  8. String name = null;
  9. String price = null;
  10. public String getName() {
  11. return name;
  12. }
  13. public void setName(String name) {
  14. this.name = name;
  15. }
  16. public String getPrice() {
  17. return price;
  18. }
  19. public void setPrice(String price) {
  20. this.price = price;
  21. }
  22. }

Cons.java

Java代码  
  1. package com.wy.inject;
  2. /**
  3. *
  4. * @author wy
  5. *
  6. */
  7. public class Cons {
  8. public String APPLE = "苹果";
  9. public String ORANGE = "桔子";
  10. public static String Bann = "香蕉";
  11. public String getAPPLE() {
  12. return APPLE;
  13. }
  14. public void setAPPLE(String aPPLE) {
  15. APPLE = aPPLE;
  16. }
  17. public String getORANGE() {
  18. return ORANGE;
  19. }
  20. public void setORANGE(String oRANGE) {
  21. ORANGE = oRANGE;
  22. }
  23. public static String getBann() {
  24. return Bann;
  25. }
  26. public static void setBann(String bann) {
  27. Bann = bann;
  28. }
  29. }

Banna.java

Java代码  
  1. package com.wy.inject;
  2. /**
  3. *
  4. * @author wy
  5. *
  6. */
  7. public class Banna {
  8. String name = null;
  9. String price = null;
  10. public String getName() {
  11. return name;
  12. }
  13. public void setName(String name) {
  14. this.name = name;
  15. }
  16. public String getPrice() {
  17. return price;
  18. }
  19. public void setPrice(String price) {
  20. this.price = price;
  21. }
  22. }

三、测试例子

Java代码  
    1. package com.wy.inject;
    2. import org.springframework.context.ApplicationContext;
    3. import org.springframework.context.support.ClassPathXmlApplicationContext;
    4. public class InjectTest {
    5. public Apple apple = null;
    6. public Banna banna = null;
    7. public InjectTest() {
    8. ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    9. //      apple = (Apple)context.getBean("apple");
    10. banna = (Banna)context.getBean("banna");
    11. }
    12. public void name(){
    13. //      System.out.println("Fruit name=" + apple.getName());
    14. System.out.println("Fruit name=" + banna.getName());
    15. }
    16. /**
    17. * @param args
    18. */
    19. public static void main(String[] args) {
    20. new InjectTest().name();
    21. }
    22. }

Spring为某个属性注入值或为某个方法的返回值的更多相关文章

  1. 7 -- Spring的基本用法 -- 10... 获取其他Bean的属性值;获取Field值;获取任意方法的返回值

    7.10 高级依赖关系配置 组件与组件之间的耦合,采用依赖注入管理:但基本类型的成员变量值,应直接在代码中设置. Spring支持将任意方法的返回值.类或对象的Field值.其他Bean的getter ...

  2. 这篇文章,我们来谈一谈Spring中的属性注入

    本系列文章: 读源码,我们可以从第一行读起 你知道Spring是怎么解析配置类的吗? 配置类为什么要添加@Configuration注解? 谈谈Spring中的对象跟Bean,你知道Spring怎么创 ...

  3. 11.SpringMVC注解式开发-处理器方法的返回值

    处理器方法的返回值 使用@Controller 注解的处理器的处理器方法,其返回值常用的有四种类型 1.ModelAndView 2.String 3.void 4.自定义类型对象 1.返回Model ...

  4. Controller方法的返回值

    方法的返回值1.ModelAndView这个就不多说,这是最基础的,前面定义一个ModelAndView,中途使用addObject方法添加属性,再返回.视图解析器会自动扫描到的.2.String这个 ...

  5. 一个方法中的ajax在success中renturn一个值,但是方法的返回值是undefind?

    https://segmentfault.com/q/1010000003762379 A页面 console.log(handleData("search_list", &quo ...

  6. java中Arrays类中,binarySearch()方法的返回值问题

    最近在复习Java知识,发现果然不经常使用忘得非常快... 看到binarySearch()方法的使用时,发现书上有点错误,于是就自己上机实验了一下,最后总结一下该方法的返回值. 总结:binaryS ...

  7. SSM-SpringMVC-21:SpringMVC中处理器方法之返回值Object篇

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 今天要记录的是处理方法,返回值为Object的那种,我给它分了一下类: 1.返回值为Object数值(例如1) ...

  8. Java反射机制二 获取方法的返回值或参数的泛型信息

    在使用反射机制时,我们经常需要知道方法的参数和返回值类型,很简单  ,下面上示例,示例中的两个方法非常相似 package deadLockThread; import java.lang.refle ...

  9. SpringMVC由浅入深day01_10@RequestMapping_11controller方法的返回值

    10 @RequestMapping 10.1 Url路径映射 @RequestMapping(value="/item")或@RequestMapping("/item ...

随机推荐

  1. ASP.NET MVC系列:为已有模型添加新的属性

    在模型类Movie中添加一个新的属性Rating

  2. SQL Server论坛楼层计算触发器

    代码: USE suya_dev GO IF EXISTS( SELECT * FROM sys.triggers WHERE name = N'BBS_Post_before_insert' ) D ...

  3. 在_Layout模版中使用@Styles.Render()没有效果

    刚才有测试一个功能,就是在_Layout母版中使用了@Styles.Render()时行Render样式文件,所有在此母版下的视图均没有应用到样式,没有效果.是什么原因? 经查证资料,原来Insus. ...

  4. 解读 C 语言中的指针

    我想对很多学习C语言的新手来说,指针无疑是一个难点.但是,我觉得指针也是C语言特别重要的一个特性.也许,你在除了C和C++以外的编程语言中,很少看到指针.而C++中,也多用引用,而非指针.指针,作为一 ...

  5. 判断JS对象是否拥有某属性

    两种方式,但稍有区别 1.in 运算符  

  6. js中的延迟执行和定时执行

    在js中,延迟执行函数有两种,setTimeout和setInterval,用法如下: function testFunction(){Console.log('hovertree.com');} s ...

  7. 介绍开源的.net通信框架NetworkComms框架 源码分析(十)DOSProtection

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  许可是 ...

  8. 点击一个div隐藏另一个div

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. Android Volley框架的使用(4)

    5. 取消请求 可以通过请求的setTag()方法给请求设置TAG,需要取消这些请求时,用请求队列的cancelAll()方法取消带有特定TAG的请求. 为请求设置TAG: stringRequest ...

  10. PHP中利用GD实现的柱状图

    PHP中利用GD实现的柱状图,自己写的一个画柱状图的类,上代码. <?php Class Chart{ private $image; // 定义图像 private $title; // 定义 ...