.. _pages/aspects_template#an_aspect_template_class: An Aspect Template Class ************************ Here is a code template which you may copy to your application namespace and adapt it to implement aspects in your qooxdoo application. For a far more advanced sample look at qx.dev.Profile. :: /** * AspectTemplate.js -- template class to use qooxdoo aspects * * This is a minimal class template to show how to deploy aspects in qooxdoo * applications. For more information on the aspect infrastructure see the API * documentation for qx.core.Aspect. * * You should copy this template to your application namespace and adapt it to * your needs. See the comments in the code for further hints. * * To enable the use of your aspect class, some extra settings need to be done * in your configuration file. * * Add a require of your aspects class to qx.Class * * Set the environment setting qx.aspects to true * * Set the environment setting qx.enableAspect to true * */ /* ************************************************************************ #require(qx.core.Aspect) #ignore(auto-require) ************************************************************************ */ /** Adapt the name of the class */ qx.Bootstrap.define("your.namespace.YourAspectClass", { /** The class definition may only contain a 'statics' and a 'defer' member */ statics : { __counter : 0, // Static vars are possible /** * This function will be called before each function call. * * @param fullname {String} Full name of the function including the class name. * @param fcn {Function} Wrapped function. * @param type {String} The type of the wrapped function (static, member, ...) * @param args {Arguments} The arguments passed to the wrapped function. */ atEnter: function(fullName, fcn, type, args) { console.log("Entering "+fullName); // Adapt this to your needs }, /** * This function will be called after each function call. * * @param fullname {String} Full name of the function including the class name. * @param fcn {Function} Wrapped function. * @param type {String} The type of the wrapped function (static, member, ...) * @param args {Arguments} The arguments passed to the wrapped function. * @param returnValue {var} return value of the wrapped function. */ atExit: function(fullName, fcn, type, args, returnValue) { console.log("Leaving "+fullName); // Adapt this to your needs } }, defer : function(statics) { /** * Registering your static functions with the aspect registry. For more * information see the API documentation for qx.core.Aspect. * * @param fcn {Function} Function from this class to be called. * @param position {String} Where to inject the aspect ("before" or "after"). * @param type {String} Which types to wrap (“member”, “static”, “constructor”, * “destructor”, “property” or ”*”). * @param name {RegExp} Name(pattern) of the functions to wrap. */ qx.core.Aspect.addAdvice(statics.atEnter, "before", "*", "your.namespace.*"); qx.core.Aspect.addAdvice(statics.atExit, "after", "*", "your.namespace.*"); } }); A job in your configuration could look something like this: :: "source" : { "require" : { "qx.Class" : ["aspects.Aop"] }, "environment" : { "qx.aspects" : true, "qx.enableAspect" : true } } If you need some more information on configuring the generator, take a look at the :doc:`/pages/tool/generator_config_ref`.