restructure to using Annotations and cglib interceptor