2016-03-30 11 views
0

Ich verwende das Decorator-Muster, um eine Serviceklasse mit einer Caching-Serviceklasse zu dekorieren.Autowirking eines Dekorators im Frühjahr

Ohne Frühling, würde ich es injizieren wie folgt:

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

Beachten Sie, dass mit dem Dekorierermuster konsistent sowohl CachingService und RoleService die IService-Schnittstelle implementieren. CachingService, als Dekorator IService hat einen Konstruktor, der ein IService Argument übernimmt.

Gibt es eine Möglichkeit, dies mithilfe von Spring-Anmerkungen zu automatisieren?

Im Fall würde es helfen, ich so etwas wie dies vorstellen:

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

Antwort

1

Sie haben Cache als separates Sprint-Bean zu definieren:

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

Danach Sie Frühjahr Bohne nach Namen autowire können:

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