I see two ways to achieve the same using no static factory methods.

1.
As Ben already suggested, create a provider. You can even call a static factory method from the provider.
Or you can inline the static factory method if it is only called from the provider. But be aware that an instance created with a custom provider will not support method interception using guices interceptors.

public class FooProvider<Foo> {
    public Foo get() {
        return Foo.createInstance();
    }
}

and then bind Foo as follows:

bind(Foo.class).toProvider(FooProvider.class);

2.
Use Onami Lifecycle to have a post construct method executed after the constructor has finished but before the created object is injected.
see:  https://onami.apache.org/lifecycle/org.apache.onami.lifecycle.jsr250/index.html





On 04/12/2015 09:52 PM, John Calcote wrote:
The most significant benefit of this pattern is one which is much more obvious outside the scope of guice, and one which is used all the time. For instance, have you ever tried to design a class that runs itself (a run method) within a thread? It's nice when you create one of these objects to have the constructor simply start the thread and return. The problem is that you have to pass "this" to the thread start routine as static data, and it's a real issue if the OS happens to put your constructor to sleep after it's scheduled itself to be run, but before it returns, then the OS schedules your new thread to wake up and do something with your partially constructed object. Several IDEs (netbeans included) display a warning whenever 'this' is handed to an object in the constructor - it flags these as 'suspicious constructor arguments'. 

The usual way around this problem is to have a static factory method in your class that calls a private constructor to build your object and then initializes it with a call to a private init function that hands 'this' to the consumer object (e.g., thread). Now, the only way you can create your objects is by calling it's static factory method. So... the OP's question still stands, and for very good reason - is there a way to annotate your class so that guice will create it by calling a static factory instead of a constructor?

Thanks!
John

On Tuesday, March 13, 2007 at 11:00:10 AM UTC-6, Hani Suleiman wrote:

On Mar 13, 2007, at 12:55 PM, Ben wrote:

>
> Is there a way to tell Guice that I want to use
> "MyClass.newInstance(...)" to instantiate the class?
>
What's the benefit of doing this instead of a constructor?

> And more, can I direct Guice to use "Factorys.createMyInteraface()" to
> instantiate an instance of MyInterface?
>

Why not just write a Provider, which is analogous to your factory?

--
You received this message because you are subscribed to the Google Groups "google-guice" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/google-guice.
To view this discussion on the web visit https://groups.google.com/d/msgid/google-guice/8bb1b5e8-9dba-4078-a2a2-9572d11c5f00%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "google-guice" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/google-guice.
To view this discussion on the web visit https://groups.google.com/d/msgid/google-guice/552AD42D.3050403%40gmx.ch.
For more options, visit https://groups.google.com/d/optout.

Reply via email to