You use spring aop to configure logging, and this is a valid approach. There are a few things you should consider:
Spring AOP uses a dynamic proxy to decorate the class with (logging) tips. This proxy server intercepts calls to your object and applies a registration tip. In your class, you call the Test method from the class itself. Thus, a dynamic proxy server will never be able to intercept the call, and no protocols will happen.
I read from your config that you determine what advice you need to execute (your LogCallInterceptor ) and where (the methods match your attribute), but I donβt see where you define your factory proxy. spring should create a proxy, and you should tell it where to do it.
aop quickstart is a good place to learn how to do it. In fact, one of the first examples is the registration example, which is very applicable to your question. I assume that after reading the first part of the quick start (chapter 38.2.1.), You will understand what to do to make this work.
Spring AOP is a powerful technique, but at first it can be a bit of a challenge. You are already on the way.
Change 1
I see that you have updated your question. I think you're almost there.
Now you instantiate SomeClass directly from the code. This way, spring will not get the opportunity to create its proxy again. You must delegate the creation of SomeClass to the spring container:
public MainWindow() {
Thus, SomeClass will hold the proxy instead of the target.
After this, one problem remains ( hint ).
Edit 2
Your Test method must be virtual, otherwise spring cannot create a proxy based on inheritance. (or your class must implement one or more interfaces).
Auto Proxy Configuration
The following app.config application uses DefaultAdvisorAutoProxyCreator . This ensures that you do not need to create a proxy factory for each class to which you want to apply a logging advisor. DefaultAdvisorAutoProxyCreator will find all objects with LogCallAttribute and create a proxy for them.
<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <sectionGroup name="spring"> <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core" /> <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" /> </sectionGroup> </configSections> <spring> <context> <resource uri="config://spring/objects"/> </context> <objects xmlns="http://www.springframework.net"> <object id="TestLogAdvice" type="Spring.Aop.Support.AttributeMatchMethodPointcutAdvisor, Spring.Aop"> <property name="advice"> <object type="q8029460.LogCallInterceptor, q8029460" /> </property> <property name="attribute" value="q8029460.LogCallAttribute, q8029460" /> </object> <object id="ProxyCreator" type="Spring.Aop.Framework.AutoProxy.DefaultAdvisorAutoProxyCreator, Spring.Aop"/> <object id="mySomeClass" type="q8029460.MyClass, q8029460" /> </objects> </spring> </configuration>