Hi,

To start with I propose to model against the plexus annotations but  
more simple:

* Component
* Requirement
* Configuration

/**
  * Marks a class as a XWiki component.
  */
@Documented
@Retention(RUNTIME)
@Target(TYPE)
@Inherited
public @interface Component
{
     Class<?> role();

     String hint() default "";

     String instantiationStrategy() default "";
}

/**
  * Configures a requirement.
  */
@Documented
@Retention(RUNTIME)
@Target({ FIELD, METHOD })
@Inherited
public @interface Requirement
{
     Class<?> role() default Object.class;

     String hint() default "";

     //
     // HACK: This is here to support component requirement lists,  
which can take a list of hints
     //

     String[] hints() default {};
}

Note: not sure yet why plexus says it's a hack.

/**
  * Marks a field as a configuration element with a default value.
  */
@Documented
@Retention(RUNTIME)
@Target(FIELD)
@Inherited
public @interface Configuration
{
     String name() default "";

     String value();
}

So for example in the code you'd have:

@Component(role=Parser.class)
public class WikiModelXWikiParser implements Parser...
{
       @Requirement
       private LinkParser linkParser;

....

wdyt?

I'm still researching.

Thanks
-Vincent
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to