The lookup and injection is based on the request and not static. You
could inject all the variations and then select the correct one based
on the request, but I tend to think of that as just another lookup
which is embedded inside a command/action. I tend to prefer more
dynamic lookups at runtime and localize them to a single location.
This makes all the commands/actions much simpler and easier to test
and maintain.
-bp
On Aug 13, 2009, at 9:39 PM, Rory Ye 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
>
> >
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---