[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [aspectj-users] Runtime weaving without agent
|
How about compile-time weaving aspects and (de-)activating them using if() pointcuts? Try not to overcomplicate your setup, keep it simple.
Alexander Kriegisch
Am 08.04.2013 um 17:45 schrieb Eric Chatellier <chatellier@xxxxxxxxxxxxx>:
> 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@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/aspectj-users