Spring为某个属性注入值或为某个方法的返回值
项目中用到需要初始化一些数据,Spring提供了filed的值注入和method的返回值注入。

一、Field值的注入
filed值注入需要使用org.springframework.beans.factory.config.FieldRetrievingFactoryBean来获取类的静态变量。
例如,我们通常在接口中定义常量:

- package com.wy.inject;
- /**
- *
- * @author wy
- *
- */
- public interface Fruit {
- public String APPLE = "苹果";
- public String ORANGE = "桔子";
- }
下面利用FieldRetrievingFactoryBean获取CarBandType接口中定义的常量,并注入到某个bean的属性中:

- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:task="http://www.springframework.org/schema/task"
- xsi:schemaLocation="http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-3.1.xsd
- http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
- http://www.springframework.org/schema/task
- http://www.springframework.org/schema/task/spring-task-3.1.xsd">
- <!-- 1、通过注入属性
- <bean id="appleBean" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">
- <property name="staticField" value="com.wy.inject.Fruit.APPLE" />
- </bean>
- <bean id="apple" class="com.wy.inject.Apple">
- <property name="name" ref="appleBean" />
- </bean>-->
Spring还允许用户用常量的全限定名作为FieldRetrievingFactoryBean的id,其效果和通过配置staticField属性是一样的:

- <!-- 2、通过全限量名称
- <bean id="com.wy.inject.Fruit.APPLE" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">
- </bean>
- <bean id="apple" class="com.wy.inject.Apple">
- <property name="name" ref="com.wy.inject.Fruit.APPLE" />
- </bean> -->
当然,也可以直接将FieldRetrievingFactoryBean以内置bean的方式对属性进行赋值,这样在配置上更紧凑一些:

- <!-- 3、通过内置Bean的方式
- <bean id="apple" class="com.wy.inject.Apple">
- <property name="name">
- <bean id="com.wy.inject.Fruit.APPLE" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean"/>
- </property>
- </bean>-->
二、Method返回值的注入
Method返回值的注入需要使用MethodInvokingFactoryBean来完成。
在xml配置中,需要设定targetObject和targetMethod来指定目标bean和方法。如果使用静态方法,则需要指定targetClass和targetMethod。
1、非静态方法配置文件如下:

- <!-- 1、Method返回值的注入
- <bean id="apple" class="com.wy.inject.Apple">
- <property name="name">
- <bean
- class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
- <property name="targetObject">
- <ref local="cons" />
- </property>
- <property name="targetMethod">
- <value>getAPPLE</value>
- </property>
- </bean>
- </property>
- </bean>
- <bean id="cons" class="com.wy.inject.Cons" /> -->
2、静态方法的配置

- <!-- 2、静态方法返回值的注入 -->
- <bean id="banna" class="com.wy.inject.Banna">
- <property name="name">
- <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
- <property name="targetClass">
- <value>com.wy.inject.Cons</value>
- </property>
- <property name="targetMethod">
- <!-- getBann必须是静态方法 -->
- <value>getBann</value>
- </property>
- </bean>
- </property>
- </bean>
涉及到的类:
Apple.java

- package com.wy.inject;
- /**
- *
- * @author wy
- *
- */
- public class Apple {
- String name = null;
- String price = null;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getPrice() {
- return price;
- }
- public void setPrice(String price) {
- this.price = price;
- }
- }
Cons.java

- package com.wy.inject;
- /**
- *
- * @author wy
- *
- */
- public class Cons {
- public String APPLE = "苹果";
- public String ORANGE = "桔子";
- public static String Bann = "香蕉";
- public String getAPPLE() {
- return APPLE;
- }
- public void setAPPLE(String aPPLE) {
- APPLE = aPPLE;
- }
- public String getORANGE() {
- return ORANGE;
- }
- public void setORANGE(String oRANGE) {
- ORANGE = oRANGE;
- }
- public static String getBann() {
- return Bann;
- }
- public static void setBann(String bann) {
- Bann = bann;
- }
- }
Banna.java

- package com.wy.inject;
- /**
- *
- * @author wy
- *
- */
- public class Banna {
- String name = null;
- String price = null;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getPrice() {
- return price;
- }
- public void setPrice(String price) {
- this.price = price;
- }
- }
三、测试例子

- package com.wy.inject;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- public class InjectTest {
- public Apple apple = null;
- public Banna banna = null;
- public InjectTest() {
- ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
- // apple = (Apple)context.getBean("apple");
- banna = (Banna)context.getBean("banna");
- }
- public void name(){
- // System.out.println("Fruit name=" + apple.getName());
- System.out.println("Fruit name=" + banna.getName());
- }
- /**
- * @param args
- */
- public static void main(String[] args) {
- new InjectTest().name();
- }
- }
Spring为某个属性注入值或为某个方法的返回值的更多相关文章
- 7 -- Spring的基本用法 -- 10... 获取其他Bean的属性值;获取Field值;获取任意方法的返回值
7.10 高级依赖关系配置 组件与组件之间的耦合,采用依赖注入管理:但基本类型的成员变量值,应直接在代码中设置. Spring支持将任意方法的返回值.类或对象的Field值.其他Bean的getter ...
- 这篇文章,我们来谈一谈Spring中的属性注入
本系列文章: 读源码,我们可以从第一行读起 你知道Spring是怎么解析配置类的吗? 配置类为什么要添加@Configuration注解? 谈谈Spring中的对象跟Bean,你知道Spring怎么创 ...
- 11.SpringMVC注解式开发-处理器方法的返回值
处理器方法的返回值 使用@Controller 注解的处理器的处理器方法,其返回值常用的有四种类型 1.ModelAndView 2.String 3.void 4.自定义类型对象 1.返回Model ...
- Controller方法的返回值
方法的返回值1.ModelAndView这个就不多说,这是最基础的,前面定义一个ModelAndView,中途使用addObject方法添加属性,再返回.视图解析器会自动扫描到的.2.String这个 ...
- 一个方法中的ajax在success中renturn一个值,但是方法的返回值是undefind?
https://segmentfault.com/q/1010000003762379 A页面 console.log(handleData("search_list", &quo ...
- java中Arrays类中,binarySearch()方法的返回值问题
最近在复习Java知识,发现果然不经常使用忘得非常快... 看到binarySearch()方法的使用时,发现书上有点错误,于是就自己上机实验了一下,最后总结一下该方法的返回值. 总结:binaryS ...
- SSM-SpringMVC-21:SpringMVC中处理器方法之返回值Object篇
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 今天要记录的是处理方法,返回值为Object的那种,我给它分了一下类: 1.返回值为Object数值(例如1) ...
- Java反射机制二 获取方法的返回值或参数的泛型信息
在使用反射机制时,我们经常需要知道方法的参数和返回值类型,很简单 ,下面上示例,示例中的两个方法非常相似 package deadLockThread; import java.lang.refle ...
- SpringMVC由浅入深day01_10@RequestMapping_11controller方法的返回值
10 @RequestMapping 10.1 Url路径映射 @RequestMapping(value="/item")或@RequestMapping("/item ...
随机推荐
- Visual Studio 后期生成事件复制配置文件
命令行 copy 源文件 目标路径 copy "$(SolutionDir)\ICBC.Sdyf.Applications\bin\Debug\ICBC.Sdyf.Applications. ...
- Winform图片拖拽与缩放
最近做项目的时候遇到上传施工平面布置图,查看,因为图片比较大,一般的显示器分辨率无法显示全,然后还需要放大看清楚图片里面的文字内容,所以需要用到图片的拖拽与缩放功能.这里整理下具体操作. 首先新建一个 ...
- 解密 JavaScript 中的 this
this的工作原理 如果一个函数被作为一个对象的方法调用,那么this将被指派为这个对象. var parent = { method: function () { conso ...
- ASP.NET Core Web API 开发-RESTful API实现
ASP.NET Core Web API 开发-RESTful API实现 REST 介绍: 符合REST设计风格的Web API称为RESTful API. 具象状态传输(英文:Representa ...
- SQLProfiler_SQL抓包
有时候我们的某个程序或者应用在执行SQL语句时报错了, 我们需要拿到报错的SQL语句检查, 那么你可以借助:SQL Profiler工具来实现. 1.SQL Profiler是一个可以检测SQL服务器 ...
- 用js解析经json序列化后的C#的DateTime类型数据
格式化日期(网上到处是),把下面的代码添加到jQuery.js文件中 //格式化日期 Date.prototype.format = function(format) { /* * eg:format ...
- C语言的关键字,运算符,标识符
关键字 数据类型修饰相关 auto按照自动的方式进行变量的存储 const定义常量或常参数 extern声明外部变量或函数 register指定变量的存储类型是寄存器变量 static指定变量的存储类 ...
- java web学习总结(一) -------------------基本概念
一.基本概念 1.1.WEB开发的相关知识 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资源分为: 静态web资源( ...
- mybatis 3的TypeHandler解析(null值的处理)
最近,在测试迁移公司的交易客户端连接到自主研发的中间件时,调用DAO层时,发现有些参数并没有传递,而在mapper里面是通过parameterMap传递的,因为有些参数为null,这就导致了参数传递到 ...
- 02Mybatis_原生态jdbc编程中的问题总结——从而引生出为什么要用Mybatis
我们先用jdbc去编写一个例子: 第一步:建表 /* SQLyog v10.2 MySQL - 5.1.72-community : Database - mybatis ************** ...