原文地址:/blog/?p=105
Spring的架构对于静态类和静态方法的支持并不是很友好。Spring没有现成的办法来完成静态字段的注入,这是因为Spring根本就无法检测到这些静态属性。Spring的设计者意识到这个缺点,然后提出了如下的解决方案:
定义类的静态字段时不实用任何注解;
对有静态属性的类标注@Component 注解,使得这些属性在Spring启动时注入;
定义一个非静态的setter方法,使用该方法为静态属性赋值
把这个setter方法标注 @Autowired(required = true) 注解。
@Component
public class UserUtils
{
private static UserAccessor userAccessor;
/**
* Sets the user DAO. This method should never be called except by Spring
* @param userAccessor The user accessor to set
*/
@Autowired(required = true)
public void setUserAccessor(UserAccessor userAccessor) {
= userAccessor;
}
}
采用这种方法,我们就可以扬长避短、开开心心地使用Spring的注解功能。但是要注意,我们应该进可能地避免使用它。这种方法只应该用于对遗留系统的兼容和支持。因为对于存在大量静态字段的应用而言,其可扩展性会受到限制。