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框架中的一种核心特性——依赖注入(Dependency Injection,DI)。Spring框架通过DI机制,能够自动地管理对象间的依赖关系,从而简化了Java应用的开发...
在Spring中,形参精确匹配是指在方法参数上使用`@Value`注解来注入值,可以是常量、环境变量、属性文件中的值等。例如: ```java public void setConfig(@Value("${config.name}") String configName) { // ... } ...
Math.round方法用于对浮点数进行四舍五入,返回值为最接近的long和int类型。在Java中,Servlet的生命周期包括初始化、服务请求和销毁。抽象类可以定义抽象方法,而且不能实例化。ArrayList是线程不安全的集合,若要...
- **Introduction**:介绍通知,允许在不修改类代码的情况下为类添加新的方法或字段。通过这种方式,可以在运行时动态地增强类的功能。 #### 三、其他知识点解析 - **Hibernate的核心技术**:Hibernate的核心技术...
这个教程涵盖了Java SE 6的核心知识点,适合初学者系统学习,通过实践案例和深入讲解,可以帮助读者快速掌握Java编程,为进一步学习Spring Framework或其他Java相关技术打下坚实基础。同时,结合《Spring Framework ...
4. 接口:接口是完全抽象的类,只包含常量和抽象方法,用于定义多个类的公共行为。 5. 构造器:构造器用于初始化新创建的对象,名字与类名相同且无返回类型。 三、异常处理 Java使用异常处理机制来处理程序运行时...
- `<result>`标签定义了Action执行后的跳转页面,`name`属性对应Action执行方法的返回值,`value`属性指定了跳转的JSP页面路径。 3. **命名空间(namespace)**: - 命名空间用于组织Action,决定了Action的URL...
- 泛型类与泛型方法:理解如何在类或方法中使用泛型。 - 泛型擦除:了解编译器如何处理泛型信息。 - 泛型通配符:学习使用?表示未知类型。 2. **反射**: - Class对象:获取一个对象的Class对象。 - 创建对象...
- **Action配置**:在`struts.xml`中,通过`<action>`标签定义Action,包括名字、类、方法、结果等属性。 ```xml <result name="success">/success.jsp <result name="input">/input.jsp ``` 4. **结果类型...
- Action类中的方法与视图映射对应,返回值应清晰明了,如`success`、`error`等。 - 使用 strut.xml 文件配置Action,遵循约定优于配置的原则。 - **Hibernate框架**: - 实体类属性与数据库字段一一对应,命名...
- **修改运行时类信息**:如创建新对象、调用私有方法、修改私有属性等。 8. **设计模式** - **单例模式**:了解其多种实现方式及其优缺点。 - **工厂模式**:简单工厂、工厂方法、抽象工厂模式的对比和应用。 ...
- **方法**:了解方法的定义、参数传递、返回值等。 2. **面向对象** - **封装**:如何通过访问修饰符来实现数据隐藏。 - **继承**:子类继承父类,获得其属性和方法。 - **多态**:接口和抽象类实现多态,以及...
抽象类可以有抽象方法也可以没有,但如果有抽象方法,则该类必须被声明为抽象类。 12. **普通类和抽象类的区别**:普通类可以实例化对象,而抽象类不可以。抽象类中可以包含抽象方法,也可以包含具体的方法和属性。...
每个类和接口都有详细的说明,涵盖了构造函数、方法、常量等,以及它们的功能、参数、返回值和可能抛出的异常。此外,还有各种示例代码,有助于理解如何在实际项目中使用这些类。对于深入学习Java语言、理解和利用其...
抽象类和接口的区别:抽象类可以有成员变量和具体方法,而接口只能有常量和抽象方法。 Java访问控制权限:public、protected、private和默认访问权限的区别在于访问范围不同。 数据库连接池:数据库连接池是一种...
- **Spring**:依赖注入,AOP,事务管理,MVC架构。 - **MyBatis**:SQL映射,动态SQL,事务控制。 这些知识点是Java开发者必备的基础技能,也是面试中经常被问到的题目。理解并掌握这些内容,对于提升个人技术...
类是创建对象的模板,而对象则是类的实例,它们包含了数据(属性)和行为(方法)。 2. **数据类型**:Java分为原始数据类型(如int、char、boolean等)和引用数据类型(如类、接口和数组)。理解它们的区别和用法...
可以放在类级别或方法级别,用于处理特定URL的请求。 10. **@ResponseBody** 和 **@RequestBody**:前者用于将方法的返回值直接写入HTTP响应体,后者用于将HTTP请求的主体内容绑定到一个方法参数。 11. **@Aspect*...
- Overloaded的方法可以改变返回值类型。 #### 16. Char与中文汉字 - `char`可以存储一个中文汉字,因为Java中`char`占用2个字节,足以表示Unicode字符集中的汉字。 #### 17. GC的作用 - **GC(Garbage ...
- **防止LDAP注入:** 使用绑定查询或其他安全方法来避免LDAP注入攻击。 - **防止XPath注入:** 对XPath查询中的变量进行适当处理,防止注入攻击。 - **防止资源注入:** 对用户提供的资源引用进行校验,确保其...