diff --git a/README.md b/README.md
index 19fea7c..7803cc5 100644
--- a/README.md
+++ b/README.md
@@ -10,6 +10,7 @@ Components
- **ExtensionsInjector** allows PF4J's extensions to be expose as Spring beans.
- **SpringPlugin** your plugin extends this class if your plugin contains Spring beans
- **SpringExtensionFactory** use this ExtensionFactory in your PluginManager if you have SpringPlugins
+- **SpringPluginManager** a Spring aware PluginManager
Using Maven
-------------------
@@ -52,29 +53,12 @@ Create the Spring configuration (declare some beans) using annotations with:
public class SpringConfiguration {
@Bean
- public PluginManager pluginManager() {
- PluginManager pluginManager = new DefaultPluginManager() {
-
- @Override
- protected ExtensionFactory createExtensionFactory() {
- return new SpringExtensionFactory(this);
- }
-
- };
- pluginManager.loadPlugins();
-
- // start (active/resolved) the plugins
- pluginManager.startPlugins();
-
- return pluginManager;
- }
-
- @Bean
- public static ExtensionsInjector extensionsInjector() {
- return new ExtensionsInjector(pluginManager());
+ public SpringPluginManager pluginManager() {
+ return new SpringPluginManager();
}
@Bean
+ @DependsOn("pluginManager")
public Greetings greetings() {
return new Greetings();
}
diff --git a/demo/api/pom.xml b/demo/api/pom.xml
index 57d0b31..a734be0 100644
--- a/demo/api/pom.xml
+++ b/demo/api/pom.xml
@@ -4,12 +4,12 @@
org.pf4j.demo
pf4j-spring-demo-parent
- 0.4.0-SNAPSHOT
+ 0.5.0-SNAPSHOT
4.0.0
pf4j-spring-demo-api
- 0.4.0-SNAPSHOT
+ 0.5.0-SNAPSHOT
jar
Demo Api
diff --git a/demo/app/pom.xml b/demo/app/pom.xml
index b4610ec..ca4c7a5 100644
--- a/demo/app/pom.xml
+++ b/demo/app/pom.xml
@@ -4,12 +4,12 @@
org.pf4j.demo
pf4j-spring-demo-parent
- 0.4.0-SNAPSHOT
+ 0.5.0-SNAPSHOT
4.0.0
pf4j-spring-demo-app
- 0.4.0-SNAPSHOT
+ 0.5.0-SNAPSHOT
jar
Demo App
diff --git a/demo/app/src/main/java/org/pf4j/demo/WhazzupGreeting.java b/demo/app/src/main/java/org/pf4j/demo/WhazzupGreeting.java
index c742127..bc5a85a 100644
--- a/demo/app/src/main/java/org/pf4j/demo/WhazzupGreeting.java
+++ b/demo/app/src/main/java/org/pf4j/demo/WhazzupGreeting.java
@@ -17,11 +17,13 @@
import org.pf4j.Extension;
import org.pf4j.demo.api.Greeting;
+import org.springframework.context.annotation.Scope;
/**
* @author Decebal Suiu
*/
@Extension
+@Scope("prototype")
public class WhazzupGreeting implements Greeting {
@Override
diff --git a/demo/app/src/main/resources/log4j.properties b/demo/app/src/main/resources/log4j.properties
index f42e226..b7b7039 100644
--- a/demo/app/src/main/resources/log4j.properties
+++ b/demo/app/src/main/resources/log4j.properties
@@ -1,4 +1,4 @@
-log4j.rootLogger=DEBUG, Console
+log4j.rootLogger=WARN, Console
#
# PF4J log
diff --git a/demo/plugins/plugin1/pom.xml b/demo/plugins/plugin1/pom.xml
index 080ab26..398f3f7 100644
--- a/demo/plugins/plugin1/pom.xml
+++ b/demo/plugins/plugin1/pom.xml
@@ -4,12 +4,12 @@
org.pf4j.demo
pf4j-spring-demo-plugins
- 0.4.0-SNAPSHOT
+ 0.5.0-SNAPSHOT
4.0.0
pf4j-spring-demo-plugin1
- 0.4.0-SNAPSHOT
+ 0.5.0-SNAPSHOT
jar
Demo Plugin #1
diff --git a/demo/plugins/plugin2/pom.xml b/demo/plugins/plugin2/pom.xml
index a623434..39719b3 100644
--- a/demo/plugins/plugin2/pom.xml
+++ b/demo/plugins/plugin2/pom.xml
@@ -4,12 +4,12 @@
org.pf4j.demo
pf4j-spring-demo-plugins
- 0.4.0-SNAPSHOT
+ 0.5.0-SNAPSHOT
4.0.0
pf4j-spring-demo-plugin2
- 0.4.0-SNAPSHOT
+ 0.5.0-SNAPSHOT
jar
Demo Plugin #2
diff --git a/demo/plugins/plugin2/src/main/java/org/pf4j/demo/hello/HelloPlugin.java b/demo/plugins/plugin2/src/main/java/org/pf4j/demo/hello/HelloPlugin.java
index 05d5030..944f38d 100644
--- a/demo/plugins/plugin2/src/main/java/org/pf4j/demo/hello/HelloPlugin.java
+++ b/demo/plugins/plugin2/src/main/java/org/pf4j/demo/hello/HelloPlugin.java
@@ -15,6 +15,7 @@
*/
package org.pf4j.demo.hello;
+import org.pf4j.spring.SpringPluginManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
@@ -48,6 +49,11 @@ public void stop() {
@Override
protected ApplicationContext createApplicationContext() {
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
+ /*
+ // set the parent context (to access beans from application)
+ SpringPluginManager pluginManager = (SpringPluginManager) getWrapper().getPluginManager();
+ applicationContext.setParent(pluginManager.getApplicationContext());
+ */
applicationContext.setClassLoader(getWrapper().getPluginClassLoader());
applicationContext.register(SpringConfiguration.class);
applicationContext.refresh();
diff --git a/demo/plugins/pom.xml b/demo/plugins/pom.xml
index ebd8550..410e983 100644
--- a/demo/plugins/pom.xml
+++ b/demo/plugins/pom.xml
@@ -4,12 +4,12 @@
org.pf4j.demo
pf4j-spring-demo-parent
- 0.4.0-SNAPSHOT
+ 0.5.0-SNAPSHOT
4.0.0
pf4j-spring-demo-plugins
- 0.4.0-SNAPSHOT
+ 0.5.0-SNAPSHOT
pom
Demo Plugins Parent
diff --git a/demo/pom.xml b/demo/pom.xml
index 1d78c8d..320d36e 100644
--- a/demo/pom.xml
+++ b/demo/pom.xml
@@ -4,13 +4,13 @@
org.pf4j
pf4j-spring-parent
- 0.4.0-SNAPSHOT
+ 0.5.0-SNAPSHOT
4.0.0
org.pf4j.demo
pf4j-spring-demo-parent
- 0.4.0-SNAPSHOT
+ 0.5.0-SNAPSHOT
pom
Demo Parent
diff --git a/pf4j-spring/pom.xml b/pf4j-spring/pom.xml
index 02c7c7d..3acb067 100644
--- a/pf4j-spring/pom.xml
+++ b/pf4j-spring/pom.xml
@@ -4,12 +4,12 @@
org.pf4j
pf4j-spring-parent
- 0.4.0-SNAPSHOT
+ 0.5.0-SNAPSHOT
4.0.0
pf4j-spring
- 0.4.0-SNAPSHOT
+ 0.5.0-SNAPSHOT
PF4J-Spring Parent
PF4J-Spring Integration
diff --git a/pf4j-spring/src/main/java/org/pf4j/spring/ExtensionsInjector.java b/pf4j-spring/src/main/java/org/pf4j/spring/ExtensionsInjector.java
index 7cf5ab9..4a07530 100644
--- a/pf4j-spring/src/main/java/org/pf4j/spring/ExtensionsInjector.java
+++ b/pf4j-spring/src/main/java/org/pf4j/spring/ExtensionsInjector.java
@@ -19,7 +19,11 @@
import org.pf4j.PluginWrapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory;
+import org.springframework.beans.factory.support.BeanDefinitionBuilder;
+import org.springframework.beans.factory.support.BeanDefinitionRegistry;
+import org.springframework.context.annotation.Scope;
import java.util.List;
import java.util.Set;
@@ -77,8 +81,20 @@ public void injectExtensions() {
* Override this method if you wish other register strategy.
*/
protected void registerExtension(Class> extensionClass) {
- Object extension = pluginManager.getExtensionFactory().create(extensionClass);
- beanFactory.registerSingleton(extension.getClass().getName(), extension);
+ String beanName = extensionClass.getName();
+
+ if (extensionClass.isAnnotationPresent(Scope.class)) {
+ String scope = extensionClass.getAnnotation(Scope.class).value();
+ log.info("Registering {} with scope: {}", beanName, scope);
+ BeanDefinitionBuilder definitionBuilder = BeanDefinitionBuilder.rootBeanDefinition(extensionClass);
+ definitionBuilder.setScope(scope);
+ BeanDefinition definition = definitionBuilder.getBeanDefinition();
+ ((BeanDefinitionRegistry) beanFactory).registerBeanDefinition(beanName, definition);
+ } else {
+ log.info("Registering {} as singleton", beanName);
+ Object extension = pluginManager.getExtensionFactory().create(extensionClass);
+ beanFactory.registerSingleton(extension.getClass().getName(), extension);
+ }
}
}
diff --git a/pom.xml b/pom.xml
index 286cb8a..87659ee 100644
--- a/pom.xml
+++ b/pom.xml
@@ -10,7 +10,7 @@
4.0.0
org.pf4j
pf4j-spring-parent
- 0.4.0-SNAPSHOT
+ 0.5.0-SNAPSHOT
pom
PF4J-Spring Parent
PF4J-Spring Integration