Hi Fred,
I tried my best to follow the documentation provided on Annotation
when defining the implementation for my custom annotation. Here is
the class that I created. Hopefully you can spot something I missed.
For testing I have used a String value instead of Enum that I
eventually wish to use (if I ever get this to work). The annotation
has only one field.
public class RegistrarImpl implements Registrar{
public String theValue;
public RegistrarImpl(String value){
theValue = value;
}
public String value(){
return theValue;
}
public Class<? extends Annotation> annotationType() {
return Registrar.class;
}
public boolean equal(Object obj){
if (obj instanceof Registrar){
return theValue.equals(
((Registrar)obj).value());
}
return false;
}
public int hashCode(){
return value().hashCode();
}
}
It is quite strpublic class RegistrarImpl implements Registrar{
public String theValue;
public RegistrarImpl(String value){
theValue = value;
}
public String value(){
return theValue;
}
public Class<? extends Annotation> annotationType() {
return Registrar.class;
}
public boolean equal(Object obj){
if (obj instanceof Registrar){
return theValue.equals(
((Registrar)obj).value());
}
return false;
}
public int hashCode(){
return value().hashCode();
}
}
I find it quite strange that passing the class Registrar.class as the
fourth parameter to the newBinder method matches it to the annotation
with the value provided.
@Inject(optional=true)
public void registerAll (@Registrar ("100") Map<String, Object> aMap)
{
theMap.putAll(aMap);
}
It is almost like Guice is ignoring the value provided with the
annotation when creating the MapBinder.
Thanks,
GuptaJi
On Apr 20, 12:09 am, Fred Faber <[email protected]> wrote:
> GuptaJi,
>
> What does your implementation of your Annotation look like? The javadoc has
> a unique contract that you might want to browse to be sure your class is in
> accord w/ it.
>
> -Fred
>
>
>
>
>
> On Tue, Apr 20, 2010 at 12:05 AM, GuptaJi <[email protected]> wrote:
> > Hi Fred,
>
> > I tried what you had suggested but still no luck. I am trying to use
> > the method:
> > MapBinder.newMapBinder(Binder binder, Class<K> keyType, Class<V>
> > valueType, Annotation annotation) ;
>
> > If I pass the AnnotationImpl object as the fourth parameter, the map
> > inject elsewhere contains no value. However, if I modify the
> > Annotation to be without value, it works fine. (I did remove the value
> > method from AnnotationImpl and at the point of injection).
>
> > Any ideas on what I might be doing wrong?
>
> > Thanks,
> > GuptaJi
>
> > On Apr 19, 7:58 pm, Fred Faber <[email protected]> wrote:
> > > Basically you need to be able to reference an instance of your annotation
> > in
> > > your binding.
>
> > > You can do this by implementing your annotation:
>
> > > class AnnotationNameImpl implements @AnnotationName {
> > > ....
>
> > > }
>
> > > and then you can instantiate an instance in your binding:
>
> > > bind(...).annotatedWith(new AnnotationNameImpl(AnEnum.someValue));
>
> > > I bet you could also develop a simple service that would allow you do do:
>
> > > class YourModule {
> > > ....
>
> > > �...@annotationname(AnEnum.someValue)
> > > private static final String annotatedString = null;
>
> > > protected void configure() {
> > > Annotation annotation =
> > > AnnotationReader.readAnnotationFrom(getClass(),
> > "annotatedString");
> > > bind(....)
> > > }
>
> > > }
>
> > > -Fred
>
> > > On Mon, Apr 19, 2010 at 11:44 AM, GuptaJi <[email protected]> wrote:
> > > > Hi,
>
> > > > I am relatively new to Guice but I have read the documentation well.
> > > > I am looking for a way to create a map binder in my module with an
> > > > annotation. Creating with an annotation is easy enough by supplying
> > > > AnnotationName.class as the fourth parameter in newBinder(). My
> > > > requirements need the annotation to be supplied with a value so that
> > > > it is possible to use something like:
> > > > �...@annotationname(AnEnum.someValue).
>
> > > > Is it even possible to do something like what I am describing?
>
> > > > Thanks a lot for your help.
>
> > > > Cheers,
> > > > GuptaJi
>
> > > > --
> > > > You received this message because you are subscribed to the Google
> > Groups
> > > > "google-guice" group.
> > > > To post to this group, send email to [email protected].
> > > > To unsubscribe from this group, send email to
> > > > [email protected]<google-guice%2bunsubscr...@googlegroups.com>
> > <google-guice%2bunsubscr...@googlegroups.com>
> > > > .
> > > > For more options, visit this group at
> > > >http://groups.google.com/group/google-guice?hl=en.
>
> > > --
> > > You received this message because you are subscribed to the Google Groups
> > "google-guice" group.
> > > To post to this group, send email to [email protected].
> > > To unsubscribe from this group, send email to
> > [email protected]<google-guice%2bunsubscr...@googlegroups.com>
> > .
> > > For more options, visit this group athttp://
> > groups.google.com/group/google-guice?hl=en.- Hide quoted text -
>
> > > - Show quoted text -
>
> > --
> > You received this message because you are subscribed to the Google Groups
> > "google-guice" group.
> > To post to this group, send email to [email protected].
> > To unsubscribe from this group, send email to
> > [email protected]<google-guice%2bunsubscr...@googlegroups.com>
> > .
> > For more options, visit this group at
> >http://groups.google.com/group/google-guice?hl=en.
>
> --
> You received this message because you are subscribed to the Google Groups
> "google-guice" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group
> athttp://groups.google.com/group/google-guice?hl=en.- Hide quoted text -
>
> - Show quoted text -
--
You received this message because you are subscribed to the Google Groups
"google-guice" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/google-guice?hl=en.