Joerg Heinicke wrote:
> On 30.12.2005 19:09, Carsten Ziegeler wrote:
>
>
>>class MyComponent implements SOMETHING, ThreadSafe, Disposable,
>>Serviceable {
>>protected ClassA compA;
>>protected ClassB compB;
>>protected ServiceManager m;
>>
>>public void service(ServiceManager m) {
>> this.m = m;
>> compA = (ClassA)m.lookup(ClassA.ROLE);
>> compB = (ClassB)m.lookup(ClassB.ROLE);
>>}
>>public void dispose() {
>> if ( m != null ) {
>> m.release(compA);
>> m.release(compB);
>> }
>>}
>>
>>Way too much code me thinks. So what about:
>>
>>class MyComponent implements SOMETHING, ThreadSafe {
>> protected final ClassA compA;
>> protected final ClassB compB;
>>
>> public MyComponent(ClassA a, ClassB b) {
>> compA = a;
>> compB = b;
>> }
>>}
>>
>>We could simply add constructor injection: if the implementation does
>>not provide a default constructor, the available constructor is called
>>using reflection and the components are injected on construction of the
>>object - no need to configure something in any xml configuration file.
>>Implementing this is easy - I did this already years ago for Fortress.
>
>
> What's the contract for the auto-wiring? Just assuming ClassA and ClassB
> have public static fields called ROLE? Sounds somewhat "strange".
>
No, the contract would be to search for a component which is registered
using the ClassA as the role name. Actually ClassA and ClassB are two
interfaces.
Carsten
--
Carsten Ziegeler - Open Source Group, S&N AG
http://www.s-und-n.de
http://www.osoco.org/weblogs/rael/