论坛首页 Java企业应用论坛

Spring 2.5Annotation使用基本类型和${}

浏览 10752 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-01-08  
最近使用了Spring2.5 annotation风格的DI,发现竟然不支持基本类型的自动装配,更别说使用PropertyPlaceholderConfigurer了。既然不支持,只能想其它的办法,最后使用XML和annotation相结合的方式解决了这个问题。
Bean定义
@Service
public class Service {

//默认是按Type装配,可以指定Qualifier使用name装配
@Autowired
@Qualifier("path")
private String path;

@Autowired
@Qualifier("pathId")
private Integer id;

public void go() {
}

}

XML配置
<?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:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
     <!-- 属性文件读入 -->
	<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
                      <list>
                     <value>classpath*:config/other.properties</value>
		    </list>
		</property>
	</bean>

     <!-- 修改为对应的packge -->
     <context:component-scan base-package="com" />

      <bean id="path" class="java.lang.String">
           <constructor-arg type="java.lang.String" value="${path}" />
      </bean> 
       <bean id="pathId" class="java.lang.Integer">
           <constructor-arg type="java.lang.String" value="${path.id}" />
      </bean>  
</beans>

这样即使用了基本类型和PropertyPlaceholderConfigurer:)
   发表时间:2008-01-08  
其实最好的做法是Spring Annotation支持下面这种配置方式
public class Service {
   
   @Value("${path}")
   pirvate String path;
}


自动注入取出properties文件中的path值,注入到path field中
0 请登录后投票
   发表时间:2008-03-07  
  
    <bean id="pathId" class="java.lang.Integer">  
          <constructor-arg type="java.lang.Integer" value="${path.id}" />  
    </bean>


这个写错了,构造函数的类型是java.lang.String
应该是:
  
    <bean id="pathId" class="java.lang.Integer">  
          <constructor-arg type="java.lang.String" value="${path.id}" />  
    </bean>

否则会报“构造函数参数类型错误”的错~~
0 请登录后投票
   发表时间:2008-03-07  
还有属性文件的载入,在引入context命名空间后有一种简化的写法:
<context:property-placeholder location="classpath:config/myset.properties" />
0 请登录后投票
   发表时间:2008-03-07  
我不觉得Annotation支持基本类型有什么好处,LZ说的
<bean id="path" class="java.lang.String">  
           <constructor-arg type="java.lang.String" value="${path}" />  
      </bean>
这一段,我不觉得这一段比<property name="xxx" value="${pathId}"/>简单多少,甚至还更复杂.我觉得单独为基本类型而再去配置文件中加入一个bean配置是一个太过的作法.什么东西,我觉得只是让程序更简单化,难道为了某种效果去复杂化了,反而不好了.
0 请登录后投票
   发表时间:2008-03-10  
Fly_m 写道
我不觉得Annotation支持基本类型有什么好处,LZ说的
<bean id="path" class="java.lang.String">  
           <constructor-arg type="java.lang.String" value="${path}" />  
      </bean>
这一段,我不觉得这一段比<property name="xxx" value="${pathId}"/>简单多少,甚至还更复杂.我觉得单独为基本类型而再去配置文件中加入一个bean配置是一个太过的作法.什么东西,我觉得只是让程序更简单化,难道为了某种效果去复杂化了,反而不好了.


只是提一种解决问题的方法,如果不用annotation当然没有这种问题。

问题是,你的项目采用了spring annotation的方式,一个类中有一些属性要注入,这些属性包括一些基本类型。你可以选择:
  • 这个类使用XML格式配置,不使用annotation,这样不存在基本类型的问题
  • 使用我annotaiton,采用我上面提到的方法解决基本类型注入问题。

我会选择和项目更匹配的第二种方式。
选择第一种的话,项目中在类级别就存在annotaion和xml两种方式的IOC配置方式,不一致不说,增加复杂性。



0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics