Just @Inject , Guice will do the dependencies.
On Sat, Aug 15, 2009 at 11:56 AM, zhaoyi <[email protected]> wrote: > > Hi Rory, > How about if the implementation class, TwitterFetcher and > JiwaiFetcher, dependencies on another type in their constructor? How > can I pass the dependencies in their constructor? > > thanks. > > On Aug 14, 11:39 am, Rory Ye <[email protected]> wrote: > > Hi,zhaoyi > > > > u can use the annotation. > > > > public interface Fetcher { > > > > List<Status> fetch() throws HttpException, IOException; > > > > } > > > > public class TwitterFetcher implements Fetcher { > > ........ > > > > } > > > > public class JiwaiFetcher implements Fetcher { > > ..... > > > > } > > > > and use two annotation to bind each implemention. > > > > @Retention(RetentionPolicy.RUNTIME) > > @Target({FIELD, METHOD, PARAMETER}) > > @BindingAnnotation > > public @interface Twitter { > > > > } > > > > @Retention(RetentionPolicy.RUNTIME) > > @Target({FIELD, METHOD, PARAMETER}) > > @BindingAnnotation > > public @interface Jiwai { > > > > } > > > > > bind(Fetcher.class).annotatedWith(Twitter.class).to(TwitterFetcher.class).in(Singleton.class); > > > > > bind(Fetcher.class).annotatedWith(Jiwai.class).to(JiwaiFetcher.class).in(Singleton.class); > > > > then u can inject them. > > > > public class FetchService { > > > > @Inject > > @Twitter > > Fetcher twitterFetcher; > > > > @Inject > > @Jiwai > > Fetcher jiwaiFetcher; > > > > public void fetch() { > > twitterFetcher.fetch(); > > ... > > } > > > > > > > > } > > On Fri, Aug 14, 2009 at 9:33 AM, zhaoyi <[email protected]> wrote: > > > > > Can't I use provider to do this? If I use factory pattern, I only need > > > one factory class. However, If I use guice, I have to create one > > > factory class, one Module class and one provider class. I think guice > > > will make our application more complicated. > > > > > On Aug 10, 3:00 pm, Brian Pontarelli <[email protected]> wrote: > > > > This pattern was common at Orbitz, although more complex. The idea > was > > > > that you wanted to use a service for booking airline tickets. You > > > > would ask the factory for an implementation of the AirBookingService > > > > for UA or AA or NWA. Each implementation would talk to the specific > > > > airline and talk their special on-the-wire language. > > > > > > We did this in a pretty cool way when we converted to Spring many > > > > years back by using a proxy service that would lazy load the real > > > > service after calling a lookup based on the request. Looked like > this: > > > > > > public class Caller { > > > > private AirBookingService service; // injected as a dynamic proxy > > > > > > public String doBooking() { > > > > AirBookingRequest request = ...; > > > > service.book(request); > > > > } > > > > > > } > > > > > > public class AirBookingServiceHandler implements InvocationHandler { > > > > private AirLookupService lookup; // injected > > > > > > public Object invoke(Object proxy, Object instance, Object.. > > > > params) { > > > > AirBookingRequest request = (AirBookingRequest) params[0]; > > > > BookingService service = > > > > lookup.lookupService(request.getAirlineCode()); > > > > return service.book(request); > > > > } > > > > > > } > > > > > > That's the general gist of it anyways. The invocation handler was > > > > actually generic enough to handle all services and pass calls from > the > > > > proxy to the correct service implementation. This allowed everything > > > > to be injected without having to inject factories everywhere. > > > > > > -bp > > > > > > On Aug 9, 2009, at 3:07 PM, [email protected] wrote: > > > > > > > Hey there, > > > > > > > Generally you wouldn't use a factory in this way - the idea is that > > > > > the caller just expects any implementation of the interface > returned > > > > > therefore the caller specifying the implementation to use doesn't > make > > > > > sense. > > > > > > > Out of interest, how are you using this particular piece of code? > > > > > > > Cheers > > > > > > > Mark > > > > > > > On Aug 9, 3:04 pm, zhao yi <[email protected]> wrote: > > > > >> This is my code based on Factory pattern. I want to use guice and > how > > > > >> can I convert it to use guice? > > > > > > >> interface Interface1{ > > > > >> public void sayHello(); > > > > > > >> } > > > > > > >> class Imple1 implements Interface1{ > > > > >> @Override > > > > >> public void sayHello() { > > > > >> System.out.println("imple 1"); > > > > >> } > > > > > > >> } > > > > > > >> class Imple2 implements Interface1{ > > > > >> @Override > > > > >> public void sayHello() { > > > > >> System.out.println("imple 2"); > > > > >> } > > > > > > >> } > > > > > > >> class Factory{ > > > > >> public Interface1 getInterface(int type){ > > > > >> if(type == 1){ > > > > >> return new Imple1(); > > > > >> }else if(type ==2){ > > > > >> return new Imple2(); > > > > >> } > > > > >> return null; > > > > >> } > > > > > > >> } > > > > > > >> thanks. > > > > -- > > My site:http://www.jdkcn.com > > > -- My site:http://www.jdkcn.com --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
