Le 05/04/2013 11:15, Alexander Kriegisch a écrit : > Check out > http://www.eclipse.org/aspectj/doc/next/weaver-api/org/aspectj/weaver/loadtime/WeavingURLClassLoader.html. > > Here is a little old code snippet I found in one of my projects when I > implemented a plug-in concept in which I had the aspect code in my main > project, but wanted to advise plugin JARs which were loaded on demand. Feel > free to modify it according to your needs: > > private void loadPlugin(String pluginJar, String pluginClassName) > throws Exception { > echo("Trying to load plugin JAR " + pluginJar); > ClassLoader loader = > Thread.currentThread().getContextClassLoader(); > WeavingURLClassLoader weaver = new WeavingURLClassLoader( > new URL[] { new File(pluginJar).toURI().toURL() }, > new URL[] { loader.getResource(".") }, > loader > ); > Class<?> pluginClass = weaver.loadClass(pluginClassName); > Plugin plugin = (Plugin) pluginClass.newInstance(); > plugin.init(this); > plugins.add(plugin); > echo("Successfully loaded and initialised plugin '" + > plugin.getName() + "'"); > } Hi, and thanks for the answer.
But i had already seen this code and it doesn't fits our needs In fact: - two annotated aspects are present in the project, but not in separate jars - aspect can't dynamically added at runtime depending on user configuration (cache, log, time aspects). I succeeded tweaking some portion of the code and using ugly introspective code to bypass aspectj final or private modifier (aspectj uses a little bit of defensive code). The code currently looks like: AspectJUrlClassLoader loader = new AspectJUrlClassLoader(urls, parentLoader); thread.setContextClassLoader(loader); if (parameters.getUseTrace()) { loader.deploy(TraceAspect.class); } if (parameters.getUseCache()) { loader.deploy(CacheAspect.class); } if (parameters.getUseTime()) { loader.deploy(TimeAspect.class); } loader.prepareForWeave(); thread.start(); Then every class loaded from this new class loader is automatically weaved if needed depending of registered aspects. I have committed my current code here: http://forge.codelutin.com/projects/isis-fish/repository/revisions/3822/show/branches/4.0.1/src/main/java/fr/ifremer/isisfish/aspect Is it an approach that could be introduced into aspectj ? -- Éric Chatellier - Code Lutin Tel: 02.40.50.29.28 - http://www.codelutin.com _______________________________________________ aspectj-users mailing list aspectj-users@eclipse.org https://dev.eclipse.org/mailman/listinfo/aspectj-users