`

Spring为属性注入某个类的常量或方法的返回值

阅读更多
spring提供了filed的值注入和method的返回值注入。

1、Field值的注入

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

例如,我们通常在接口中定义常量:
package com.baobaotao.fb;  
public interface CarBrandType {  
    String HONG_QI = "红旗";  
    String JI_LI = "吉利";  
}  

下面利用FieldRetrievingFactoryBean获取CarBandType接口中定义的常量,并注入到某个bean的属性中:
<bean id="car" class="com.baobaotao.fb.Car">  
    <property name="brand" ref="hongQi"/>  
</bean>  
<bean id="hongQi" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean"  
    <property name="staticField" value="com.baobaotao.fb.CarBrandType.HONG_QI"/>  
</bean>  

Spring还允许用户用常量的全限定名作为FieldRetrievingFactoryBean的id,其效果和通过配置staticField属性是一样的:
<bean id="car" class="com.baobaotao.fb.Car">  
    <property name="brand" ref="com.baobaotao.fb.CarBrandType.HONG_QI"/>  
</bean>  
<bean id="com.baobaotao.fb.CarBrandType.HONG_QI" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean" />  

当然,也可以直接将FieldRetrievingFactoryBean以内置bean的方式对brand属性进行赋值,这样在配置上更紧凑一些:
<bean id="car" class="com.baobaotao.fb.Car">  
    <property name="brand">  
        <bean id="com.baobaotao.fb.CarBrandType.HONG_QI" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">  
        </bean>  
    </property>  
</bean>  

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

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

配置文件如下:
<bean id="bdog" class="com.baobaotao.fb.Dog">  
  <property name="age">  
    <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">  
      <property name="targetObject">  
        <ref local="randomAge"/>  
      </property>  
      <property name="targetMethod">  
        <value>getAge</value>  
      </property>  
    </bean>  
  </property>  
</bean>  
<bean id="randomAge" class="com.baobaotao.fd.RandomAge" />  

对于静态方法:
<bean id="bdog" class="com.baobaotao.fb.Dog">  
  <property name="age">  
    <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">  
      <property name="targetClass">  
        <value>com.baobaotao.fb.RandomAge</value>  
      </property>  
      <property name="targetMethod">  
        <!-- getAge必须是静态方法 -->  
        <value>getAges</value>  
      </property>  
    </bean>  
  </property>  
</bean> 

使用静态方法的返回值注入的另一种方式:
<bean id="config"    
        class="Configuration" factory-method="getInstance">    
        <!-- 配置文件路径 -->    
        <constructor-arg type="java.lang.String" value="config.properties"/>    
</bean> 
 
运用 factory-method创建单例 ,getInstance指定的是静态方法,而不是使用构造函数来创建类的实例
private static Configuration _instance = null;    
    
private Configuration(String configPath){    
                //执行你配置文件的加载    
        System.out.println("configPath");    
    }    
        
    public static Configuration getInstance(String configPath){    
        logger.info("init...");    
        if(_instance == null){    
            _instance = new Configuration(configPath);    
        }    
        return _instance;    
}  
 
分享到:
评论

相关推荐

    知识共享-spring属性注入(雷惊风).

    标题与描述中的关键词“知识共享-Spring属性注入”聚焦于Spring框架中的一种核心特性——依赖注入(Dependency Injection,DI)。Spring框架通过DI机制,能够自动地管理对象间的依赖关系,从而简化了Java应用的开发...

    用spring写的注解

    在Spring中,形参精确匹配是指在方法参数上使用`@Value`注解来注入值,可以是常量、环境变量、属性文件中的值等。例如: ```java public void setConfig(@Value("${config.name}") String configName) { // ... } ...

    java程序员面试大全

    Math.round方法用于对浮点数进行四舍五入,返回值为最接近的long和int类型。在Java中,Servlet的生命周期包括初始化、服务请求和销毁。抽象类可以定义抽象方法,而且不能实例化。ArrayList是线程不安全的集合,若要...

    jsp编程技术复习题

    - **Introduction**:介绍通知,允许在不修改类代码的情况下为类添加新的方法或字段。通过这种方式,可以在运行时动态地增强类的功能。 #### 三、其他知识点解析 - **Hibernate的核心技术**:Hibernate的核心技术...

    Java SE 6从入门到精通.rar

    这个教程涵盖了Java SE 6的核心知识点,适合初学者系统学习,通过实践案例和深入讲解,可以帮助读者快速掌握Java编程,为进一步学习Spring Framework或其他Java相关技术打下坚实基础。同时,结合《Spring Framework ...

    java笔记郝斌.pdf

    4. 接口:接口是完全抽象的类,只包含常量和抽象方法,用于定义多个类的公共行为。 5. 构造器:构造器用于初始化新创建的对象,名字与类名相同且无返回类型。 三、异常处理 Java使用异常处理机制来处理程序运行时...

    struct2学习总结 struct2学习笔记

    - `&lt;result&gt;`标签定义了Action执行后的跳转页面,`name`属性对应Action执行方法的返回值,`value`属性指定了跳转的JSP页面路径。 3. **命名空间(namespace)**: - 命名空间用于组织Action,决定了Action的URL...

    [网盘]java程序员由菜鸟到笨鸟.pdf.2018_03_19

    - 泛型类与泛型方法:理解如何在类或方法中使用泛型。 - 泛型擦除:了解编译器如何处理泛型信息。 - 泛型通配符:学习使用?表示未知类型。 2. **反射**: - Class对象:获取一个对象的Class对象。 - 创建对象...

    SSH笔记_Struts2配置

    - **Action配置**:在`struts.xml`中,通过`&lt;action&gt;`标签定义Action,包括名字、类、方法、结果等属性。 ```xml &lt;result name="success"&gt;/success.jsp &lt;result name="input"&gt;/input.jsp ``` 4. **结果类型...

    java编码规范

    - Action类中的方法与视图映射对应,返回值应清晰明了,如`success`、`error`等。 - 使用 strut.xml 文件配置Action,遵循约定优于配置的原则。 - **Hibernate框架**: - 实体类属性与数据库字段一一对应,命名...

    JAVA面试葵花宝典.zip

    - **修改运行时类信息**:如创建新对象、调用私有方法、修改私有属性等。 8. **设计模式** - **单例模式**:了解其多种实现方式及其优缺点。 - **工厂模式**:简单工厂、工厂方法、抽象工厂模式的对比和应用。 ...

    23year-Java-interview常见提问

    - **方法**:了解方法的定义、参数传递、返回值等。 2. **面向对象** - **封装**:如何通过访问修饰符来实现数据隐藏。 - **继承**:子类继承父类,获得其属性和方法。 - **多态**:接口和抽象类实现多态,以及...

    1剑盛二面准备试题.txt1剑盛二面准备试题.txt

    抽象类可以有抽象方法也可以没有,但如果有抽象方法,则该类必须被声明为抽象类。 12. **普通类和抽象类的区别**:普通类可以实例化对象,而抽象类不可以。抽象类中可以包含抽象方法,也可以包含具体的方法和属性。...

    各类API文档

    每个类和接口都有详细的说明,涵盖了构造函数、方法、常量等,以及它们的功能、参数、返回值和可能抛出的异常。此外,还有各种示例代码,有助于理解如何在实际项目中使用这些类。对于深入学习Java语言、理解和利用其...

    IT名企JavaEE面试题最新整理(附答案)

    抽象类和接口的区别:抽象类可以有成员变量和具体方法,而接口只能有常量和抽象方法。 Java访问控制权限:public、protected、private和默认访问权限的区别在于访问范围不同。 数据库连接池:数据库连接池是一种...

    java面试题笔试题大集合及答案.rar

    - **Spring**:依赖注入,AOP,事务管理,MVC架构。 - **MyBatis**:SQL映射,动态SQL,事务控制。 这些知识点是Java开发者必备的基础技能,也是面试中经常被问到的题目。理解并掌握这些内容,对于提升个人技术...

    JAVA核心技术(代码)

    类是创建对象的模板,而对象则是类的实例,它们包含了数据(属性)和行为(方法)。 2. **数据类型**:Java分为原始数据类型(如int、char、boolean等)和引用数据类型(如类、接口和数组)。理解它们的区别和用法...

    春天核心注释

    可以放在类级别或方法级别,用于处理特定URL的请求。 10. **@ResponseBody** 和 **@RequestBody**:前者用于将方法的返回值直接写入HTTP响应体,后者用于将HTTP请求的主体内容绑定到一个方法参数。 11. **@Aspect*...

    java面试题-解密版

    - Overloaded的方法可以改变返回值类型。 #### 16. Char与中文汉字 - `char`可以存储一个中文汉字,因为Java中`char`占用2个字节,足以表示Unicode字符集中的汉字。 #### 17. GC的作用 - **GC(Garbage ...

    Java安全与质量编码规范.docx

    - **防止LDAP注入:** 使用绑定查询或其他安全方法来避免LDAP注入攻击。 - **防止XPath注入:** 对XPath查询中的变量进行适当处理,防止注入攻击。 - **防止资源注入:** 对用户提供的资源引用进行校验,确保其...

Global site tag (gtag.js) - Google Analytics