Binder#requestStaticInjection (from inside a module)
Cheers
Robbie
On Tue, Sep 2, 2008 at 1:47 PM, Anthony MULLER <[EMAIL PROTECTED]>wrote:
> Hmmm.... is there a way to configure Guice to inject any static fields with
> @Inject annotations ? :-(
>
> Anthony, desesperate developer
>
>
> 2008/8/26 Anthony MULLER <[EMAIL PROTECTED]>
>
> Hello !
>>
>> Is there a way to say once to Guice: inject any static fields named
>> LOGGER?
>>
>> Regards,
>> Anthony
>>
>>
>> 2008/8/1 Anthony MULLER <[EMAIL PROTECTED]>
>>
>> Yes, I do the same but at method level and... In fact, my need is to log
>>> all methods call BUT only methods defined in my public interfaces of my
>>> objects, not other internal methods... So, I have to do some extra efforts
>>> to guess if a method is defined in a "public" interface or not...
>>>
>>> I think I will keep my first solution because the one with
>>> java.util.logging is not good for me... I use another logger... But, I hoped
>>> to use the same mechanism: if Guice can inject a such logger, that means it
>>> knows the type of the injectee... And it is what I need!
>>>
>>> Regards
>>>
>>> Anthony
>>>
>>>
>>>
>>> 2008/8/1 jordi <[EMAIL PROTECTED]>
>>>
>>> i used a @Log annotation at type level to intercept all classes i
>>>> wanted to log, with an optional attribute logger if you want to specify the
>>>> name of the logger.
>>>>
>>>> Then i used Matchers from Guice to find all that classes and intercept
>>>> them. The only thing that interceptor does is to manually set the Logger
>>>> field in your logged class.
>>>>
>>>> I'll tune this @Log thing and write a post somewhere...
>>>>
>>>> jordi
>>>>
>>>>
>>>> On Thu, Jul 31, 2008 at 4:01 PM, Anthony MULLER <
>>>> [EMAIL PROTECTED]> wrote:
>>>>
>>>>> Any reponses on this issue please?
>>>>>
>>>>> I tried to add an handler on the logger automatically injected by
>>>>> Guice, but it is not really fine...
>>>>>
>>>>> I believed java.util.logging was only an API and I could change the
>>>>> underlying implementation but I was wrong :(
>>>>>
>>>>> Are there alternative to my primary solution?
>>>>>
>>>>> will Guice 2.0 help me anymore?
>>>>>
>>>>> Cheers,
>>>>>
>>>>> Anthony MÜLLER
>>>>>
>>>>>
>>>>> 2008/7/31 Anthony MULLER <[EMAIL PROTECTED]>
>>>>>
>>>>>> Hmm hmm, thanks for reply!
>>>>>>
>>>>>> I didn't know this tip :)
>>>>>>
>>>>>> In fact, I didn't use java.util.logging... So, is it possible:
>>>>>>
>>>>>> 1) to specify my own Logger implementation (internal) through
>>>>>> 'java.util.logging' (i don't know this class alot... I need to learn
>>>>>> about
>>>>>> it)
>>>>>>
>>>>>> or
>>>>>>
>>>>>> 2) overload Guice mecanism somewhere to tell it to inject my logger
>>>>>> rather than java.util.logging
>>>>>>
>>>>>> Regards,
>>>>>> Anthony MÜLLER
>>>>>>
>>>>>>
>>>>>> 2008/7/31 Stuart McCulloch <[EMAIL PROTECTED]>
>>>>>>
>>>>>> 2008/7/31 Anthony MULLER <[EMAIL PROTECTED]>
>>>>>>>
>>>>>>>> Hello,
>>>>>>>>
>>>>>>>> I'm trying to use Guice to inject Logger into my objects... The main
>>>>>>>> problem is that I didn't know which class is being injected. So, I
>>>>>>>> can't
>>>>>>>> build a logger with the convenient class.
>>>>>>>>
>>>>>>>
>>>>>>> FYI, Guice has a default "java.util.logging.Logger" binding for each
>>>>>>> class being injected
>>>>>>>
>>>>>>> so you can do this:
>>>>>>>
>>>>>>> import java.util.logging.Logger;
>>>>>>>
>>>>>>> @Inject
>>>>>>> Logger logger;
>>>>>>>
>>>>>>> and it will automatically use the correct name - however this is only
>>>>>>> for java.util.logging.
>>>>>>>
>>>>>>> Other 'little' problem is that the traditional way to use Logger is
>>>>>>>> to have a static field into class... And Guice doesn't like this (I
>>>>>>>> mean use
>>>>>>>> of static)... Even if it is possible to inject them with a special
>>>>>>>> Guice
>>>>>>>> method.
>>>>>>>>
>>>>>>>> So, I'd like to know if somebody already think to this (and have a
>>>>>>>> proposal to solve it).
>>>>>>>>
>>>>>>>> What I've done:
>>>>>>>>
>>>>>>>> 1) I create a class ILogger which have traditional looger méthods
>>>>>>>> (like isWarnEnabled(), warn(String msg))
>>>>>>>> 2) I had an extra parameter to this method to take as argument the
>>>>>>>> object where log operation occured
>>>>>>>>
>>>>>>>> This is how I use it:
>>>>>>>>
>>>>>>>> public class MyObject {
>>>>>>>>
>>>>>>>> // Note: field in NOT static
>>>>>>>> @Inject
>>>>>>>> private final ILogger LOGGER = null;
>>>>>>>>
>>>>>>>> public void myMethod() {
>>>>>>>> //...
>>>>>>>> // Note the "this" parameter
>>>>>>>> if (LOGGER.isWarnEnabled(*this*)) {
>>>>>>>> LOGGER.warn(*this*, "My message to log");
>>>>>>>> }
>>>>>>>> //...
>>>>>>>> }
>>>>>>>> }
>>>>>>>>
>>>>>>>> The ILogger implementation looks like:
>>>>>>>>
>>>>>>>> @Singleton
>>>>>>>> public class LoggerImpl implements ILogger {
>>>>>>>>
>>>>>>>> // Cache to store already created logger: one logger per class
>>>>>>>> strategy
>>>>>>>> private final Map<Class<?>, Logger> loggers = new
>>>>>>>> HashMap<Class<?>, Logger>();
>>>>>>>>
>>>>>>>> /**
>>>>>>>> * [EMAIL PROTECTED]
>>>>>>>> */
>>>>>>>> public void debug(Object src, String msg) {
>>>>>>>> getLogger(src).debug(msg);
>>>>>>>> }
>>>>>>>>
>>>>>>>> // ... other traditional log methods
>>>>>>>>
>>>>>>>> /**
>>>>>>>> * Return a logger instance or get it from cache.
>>>>>>>> *
>>>>>>>> * @param src
>>>>>>>> * @return Logger
>>>>>>>> */
>>>>>>>> private Logger getLogger(Object src) {
>>>>>>>> Class<?> clazz = null;
>>>>>>>> if (src instanceof Class<?>) {
>>>>>>>> clazz = (Class<?>) src;
>>>>>>>> } else {
>>>>>>>> clazz = src.getClass();
>>>>>>>> }
>>>>>>>> Logger logger = loggers.get(clazz);
>>>>>>>> if (logger == null) {
>>>>>>>> logger = Logger.getInstance(clazz.getName());
>>>>>>>> loggers.put(src.getClass(), logger);
>>>>>>>> }
>>>>>>>> return logger;
>>>>>>>> }
>>>>>>>> }
>>>>>>>>
>>>>>>>> What do you think about this?
>>>>>>>>
>>>>>>>> Is it a good way to deal with logging issue ?
>>>>>>>>
>>>>>>>> Thanks!
>>>>>>>>
>>>>>>>> Anthony MÜLLER
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Cheers, Stuart
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>
>>
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---