在用spring管理我们的类的时候有时候希望有些属性值是来源于一些配置文件,系统属性,或者一些方法调用的结果,对于前两种使用方式可以使用spring的PropertyPlaceholderConfigurer类来注入,这些内容已经在前面的文章中说过,这里就不在重复了。这里就针对第三种情况做一些说明,其实在spring中是提供了对这种需求的解决方案的,那就是使用org.springframework.beans.factory.config.MethodInvokingFactoryBean类来生成需要注入的bean的属性,下面是一个例子
MyBean.java一个普通的POJO类
- importorg.apache.commons.lang.builder.ToStringBuilder;
-
publicclassMyBean{
-
privateStringname;
-
privateStringjavaVersion;
-
publicStringgetName(){
-
returnname;
- }
-
publicvoidsetName(Stringname){
-
this.name=name;
- }
-
publicStringgetJavaVersion(){
-
returnjavaVersion;
- }
-
publicvoidsetJavaVersion(StringjavaVersion){
-
this.javaVersion=javaVersion;
- }
-
@Override
-
publicStringtoString(){
-
returnToStringBuilder.reflectionToString(this);
- }
- }
MyBeanNameProvider.java提供一个静态方法用来生成MyBean类的name属性,同理非静态方法也是可以的,参考本例子中javaVersion属性定义
- publicclassMyBeanNameProvider{
-
publicstaticStringgetName(){
-
return""+System.currentTimeMillis();
- }
- }
spring.xml
- <?xmlversion="1.0"encoding="UTF-8"?>
-
<beansxmlns="http://www.springframework.org/schema/beans"
-
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-
xmlns:aop="http://www.springframework.org/schema/aop"
-
xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.0.xsd
- http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-2.0.xsd"
-
default-lazy-init="true">
-
<beanid="myBean"class="MyBean">
-
<propertyname="name"><reflocal="myBeanName"/></property>
-
<propertyname="javaVersion"><reflocal="javaVersion"/></property>
-
</bean>
-
<beanid="sysProps"class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
-
<propertyname="targetClass">
-
<value>java.lang.System</value>
-
</property>
-
<propertyname="targetMethod">
-
<value>getProperties</value>
-
</property>
-
</bean>
-
<beanid="javaVersion"class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
-
<propertyname="targetObject">
-
<reflocal="sysProps"/>
-
</property>
-
<propertyname="targetMethod">
-
<value>getProperty</value>
-
</property>
-
<propertyname="arguments">
-
<list>
-
<value>java.version</value>
-
</list>
-
</property>
-
</bean>
-
<beanid="myBeanName"class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
-
<propertyname="staticMethod"><value>MyBeanNameProvider.getName</value></property>
-
</bean>
-
</beans>
Test.java一个测试类
- importorg.springframework.context.ApplicationContext;
-
importorg.springframework.context.support.ClassPathXmlApplicationContext;
-
publicclassTest{
-
publicstaticvoidmain(String[]args){
-
ApplicationContextctx=newClassPathXmlApplicationContext("spring.xml");
-
MyBeanmyBean=(MyBean)ctx.getBean("myBean");
- System.out.println(myBean);
- }
- }
运行Test类,就可以看到MyBean的两个属性都通过spring配置的方式注入到了类中
分享到:
相关推荐
`org.springframework.beans.factory.config.PropertyPlaceholderConfigurer` 是Spring框架中的一个重要组件,主要负责处理配置文件中的占位符替换。这个类是Spring在初始化bean时用来解析和注入环境变量或系统属性...
org.springframework.beans.factory.config org.springframework.beans.factory.parsing org.springframework.beans.factory.serviceloader org.springframework.beans.factory.support org.springframework.beans....
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.aop.config.internalAutoProxyCreator': Instantiation of bean failed; nested exception is org....
<bean class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer"> <value>classpath:jdbc.properties <!-- 配置數據源 --> <bean id="dataSource" class="org.apache....
05. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 06. ...
在源码中,`org.springframework.beans.factory.config`包包含了许多关于生命周期的接口和类,如InitializingBean、DisposableBean以及BeanFactoryPostProcessor等。 6. **事件驱动模型**:Spring提供了基于...
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [applicationContext.xml]: Initialization of bean failed; nested ...
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:log4j.properties"/> ``` 这使得Spring在启动时...
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.xml....
主要涉及的类包括`org.springframework.beans.factory.BeanFactory`和`org.springframework.context.ApplicationContext`。 2. **AOP支持**:Spring的AOP模块允许开发者定义“切面”(Aspects),这些切面可以封装...
`org.springframework.beans.factory.annotation.Autowired` 注解用于自动装配依赖,以及 `org.springframework.beans.factory.BeanFactory` 和 `org.springframework.beans.factory.config.DependencyDescriptor` ...
跟踪`org.springframework.beans.factory.config.AutowireCapableBeanFactory`中的`initializeBean`方法,可以看到如何处理懒加载逻辑。 3. 循环依赖处理 Spring框架能够处理各种复杂依赖关系,包括循环依赖。在...
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <value>classpath:/spring/include/dbQuery.properties ``` 这里,`propertyConfigurerForAnalysis`是`...
- Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1e7d503: defining beans [accountBizImpl,accountDaoImpl,baseMapperDaoImpl,org.springframework....
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <value>classpath:jdbc.properties <value>classpath:config.properties ``` 问题二:Service 中无法读取 ...
Packages ...com.kingdee.bos.transaction.springframework.beans.factory com.kingdee.bos.transaction.springframework.core com.kingdee.bos.transaction.springframework.dao ...
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.spring...
2013-08-12 14:33:37.672:WARN::Nested in org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in URL [file:/E:/cloudwave-core/src/main/...
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.spring...