2016-03-30 270 views
0

我正在使用装饰器模式来装饰具有缓存服务类的服务类。在春天自动装饰装饰器

没有春天,我会如下注入它:

private IService is = new CachingService(new RoleService()); 

需要注意的是,与Decorator模式相一致,既CachingServiceRoleService实现IService接口。 CachingService,作为IService的装饰者有一个构造函数,它需要一个IService参数。

有没有一种方法可以使用Spring注释来自动装配它?

在情况下,它会帮助,我想是这样的:

@Autowire(with=CachingService, constructor-arg-ref=RoleService) 
private IService is; 

回答

1

你必须定义CacheService作为单独的冲刺豆:

<bean id="cacheService" class="CachingService"> 
    <constructor-arg type="innerService"> 
     <bean id="roleService" class="RoleService"> 
    </constructor-arg> 
</bean> 

这一点,你可以通过名字自动装配的Spring bean后:

@Autowired 
@Qualifier("cacheService") 
private IService service;