Skip to content

Latest commit

 

History

History
44 lines (35 loc) · 1.39 KB

2018-07-19-extension-instantiation.md

File metadata and controls

44 lines (35 loc) · 1.39 KB
layout title category date order
page
Extension instantiation
doc
2018-07-19 15:28:24 -0700
37

To create extensions instances, PF4J uses an [ExtensionFactory]({{ site.codeurl }}/pf4j/src/main/java/org/pf4j/ExtensionFactory.java). By default, PF4J uses DefaultExtensionFactory as implementation of ExtensionFactory.

You can change the default implementation with:

new DefaultPluginManager() {
    
    @Override
    protected ExtensionFactory createExtensionFactory() {
        return MyExtensionFactory();
    }

};

DefaultExtensionFactory uses Class#newInstance() method to create the extension instance.

An extension instance is created on demand, when plugin.getExtensions(MyExtensionPoint.class) is called. By default, if you call plugin.getExtensions(MyExtensionPoint.class) twice:

plugin.getExtensions(MyExtensionPoint.class);
plugin.getExtensions(MyExtensionPoint.class);

then for each call, a new extension instance is created.

If you want to return the same extension instance (singleton), you need to use [SingletonExtensionFactory]({{ site.codeurl }}/pf4j/src/main/java/org/pf4j/SingletonExtensionFactory.java):

new DefaultPluginManager() {
    
    @Override
    protected ExtensionFactory createExtensionFactory() {
        return SingletonExtensionFactory();
    }

};