Ramkumar R wrote:
Hi All,
I came across this requirement, while working with Spring, but I believe
this topic also holds good for Java implementations.
Spring supports Constructor Injection by allowing to inject properties
and objects via the constructors. Not sure if Tuscany should support
this feature? As SCA+Spring depends on Tuscany runtime for binding and
dependency injections.
I believe currently Tuscany supports injection of service references
through getter & setter methods.
This question arises because the biggest benefit of setter injection is
that it allows for circular dependencies. Circular dependencies are
actually pretty common. If you have a UserService that needs to get
information about an employer from CompanyService and the CompanyService
needs information about employees from UserService, right there you have
a circular dependency. In general I find a lot of circular dependencies
between service methods, but with complex object models it is possible
to have circular dependencies elsewhere.
So considering the circular dependency issue, I believe it would be a
bad idea to support the same in Tuscany.
Like to hear from the community for more insight on this topic and how
we should go about it.
--
Thanks & Regards,
Ramkumar Ramalingam
Folks,
The SCA Java specification explicitly supports constructor based injection of both properties and
references, so Tuscany should support this.
From the OASIS SCA Java specification - sca-javacaa-1.1-spec-cd01.pdf
Lines 94-97:
2.1.4 @Reference
Accessing a service using reference injection is done by defining a field, a setter method
parameter, or a constructor parameter typed by the service interface and annotated with an
@Reference annotation
- note the explicit description of "constructor parameter"
This is made clear in the formal definition of the @Reference annotation in
section 8.15 (line 1375).
The same applies to the @Property annotation (Section 8.14, line 1311).
Currently, the SCA Spring specification says nothing about constructor injection, but I have raised
a number of issues against that specification to fix this and other problems.
Yours, Mike.