Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] initialising instance variables

Hi All,

Sorry for not being clear on this.  If I change the
instance variables in the abstract aspect to be static
and initialise them as follows:

abstract aspect LoggingAspect
{
  proctected static int callDepth;
  proctected static Log log;

  static
  {
    callDepth = 2;
    log       =
LogFactory.getLogger(LoggingAspect.class)
  }


  public abstract pointcut cutClass(Object o);
  ...
  
}

public aspect MyClassLogger extends LoggingAspect
{
  public pointcut cutClass(Object o) : this(o)
   && within(MyClass);

  // custom logging for MyClass
}

This compiles and runs fine, but this does not:


abstract aspect LoggingAspect
{
  proctected int callDepth;
  proctected Log log;

  public abstract pointcut cutClass(Object o);
  ...
  
}

public aspect MyClassLogger extends LoggingAspect
{
  public pointcut cutClass(Object o) : this(o)
    && within(MyClass);
		
  public MyClassLogger()
  {
    callDepth = 2;
    log       =
LogFactory.getLog(MyClassLogger.class);
  }
  
  // custom logging for MyClass
		
}

The compiler gives the error:

inherited abstract pointcut
LoggingAspect.cutClass(java.lang.Object) is not made
concrete in MyClassLogger


I would like to have multiple instances of loggers, so
that I can customise logging per class, and have one
log file per class if needed.

Regarding the production aspect, do you mean by saying
that 

'private PropertyChangeSupport Point.support = new
PropertyChangeSupport(this);' 

being intialised in a constructor or initialiser, that
the compiler adds the initialisation of support to
Point's constructor?  

Cheers,

Aaron.


--- Lesiecki Nicholas <ndlesiecki@xxxxxxxxx> wrote:
> From memory only, I believe that you had:
> 
> b = new Foo();
> 
> where b was some inherited instance variable. That
> has to be in a
> constructor or initialier because it's not part of a
> member declaration.
> 
> This:
> 
> >   private PropertyChangeSupport Point.support =
> new
> > PropertyChangeSupport(this);
> 
> is part of one.
> 
> That is (I *think*) the answer to the first implicit
> problem.
> 
> As to your follow-on question, I need a
> clarification:
> 
> > If I make the instance variables static and add a
> > static constructor to LoggingAspect, it compiles
> (and
> > works) fine.
> 
> What do you mean by "static constructor"?
> 
> Cheers,
> Nick
> --- Aaron Blishen <aaron_blishen@xxxxxxxxx> wrote:
> > Hi All,
> > 
> > I have tried to intialise the intance variables in
> a
> > constructor (I assumed that one was not needed as
> some
> > of the examples in the programming guide do not
> have
> > one) i.e:
> > 
> > aspect BoundPoint {
> >   private PropertyChangeSupport Point.support =
> new
> > PropertyChangeSupport(this);
> > 
> >   ....
> >   
> >  }
> > Is this becuase the aspect is adding an instance
> > variable to the class Point, and adds
> initialisation
> > of support into the Point constructor?
> > 
> > Here is my problem when I add a constructor:
> > 
> > public abstract aspect LoggingAspect
> > {
> >   // call depth per logger
> >   protected int callDepth;
> >   
> >   // (commons) Log4j logger
> >   protected Log log;
> >   
> >   // class unspecified
> >   public abstract pointcut cutClass(Object o);
> >   
> >   // pointcuts and advice for intercepting
> constructor
> > and 
> >   // method calls based on unspecified class
> > }
> > 
> > public aspect myClassLogger extends LoggingAspect
> > {
> >   // initialise logger and calldepth
> >   public myClassLogger()
> >   {
> >     callDepth = 2;
> >     log       = LogFactory.getLogger
> > (myClassLogger.class);
> >   }
> >   
> >   public pointcut cutClass(Object o) : this(o)
> >     && within(com.foo.myClass);
> >     
> >   // custom logging methods for myClass
> > }
> > 
> > The compiler complains:
> > 
> > inherited abstract pointcut
> > LoggingAspect.cutClass(java.lang.Object) is not
> made
> > concrete in com.foo.myClassLogger
> > 
> > If I make the instance variables static and add a
> > static constructor to LoggingAspect, it compiles
> (and
> > works) fine.
> > 
> > Cheers,
> > 
> > Aaron.
> > 
> > __________________________________
> > Do you Yahoo!?
> > Yahoo! SiteBuilder - Free, easy-to-use web site
> design software
> > http://sitebuilder.yahoo.com
> > _______________________________________________
> > aspectj-users mailing list
> > aspectj-users@xxxxxxxxxxx
> >
>
http://dev.eclipse.org/mailman/listinfo/aspectj-users
> 
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
>
http://dev.eclipse.org/mailman/listinfo/aspectj-users


__________________________________
Do you Yahoo!?
Yahoo! SiteBuilder - Free, easy-to-use web site design software
http://sitebuilder.yahoo.com


Back to the top