InterceptorFactoryRef interceptorFactoryRef = (InterceptorFactoryRef) advisor.resolveAnnotation(InterceptorFactoryRef.class);
if(interceptorFactoryRef == null)
throw new IllegalStateException("No InterceptorFactory specified on " + advisor.getName());
log.debug("interceptor factory class = " + interceptorFactoryRef.value());
InterceptorFactory interceptorFactory = interceptorFactoryRef.value().newInstance();
Map<Class<?>, Object> interceptors = new HashMap<Class<?>, Object>();
Map<Class<? extends Annotation>, List<Interceptor>> lifeCycleInterceptors = new HashMap<Class<? extends Annotation>, List<Interceptor>>();
for(Class<? extends Annotation> lifeCycleAnnotationClass : lifeCycleAnnotationClasses)
{
List<Interceptor> list = new ArrayList<Interceptor>();
lifeCycleInterceptors.put(lifeCycleAnnotationClass, list);
}
DefaultInterceptors defaultInterceptorsAnnotation = (DefaultInterceptors) advisor.resolveAnnotation(DefaultInterceptors.class);
List<BusinessMethodInterceptorMethodInterceptor> defaultInterceptors = new ArrayList<BusinessMethodInterceptorMethodInterceptor>();
if(defaultInterceptorsAnnotation != null)
createInterceptors(advisor, interceptorFactory, defaultInterceptorsAnnotation.value(), defaultInterceptors, interceptors, lifeCycleInterceptors);
log.debug("Found class interceptors " + defaultInterceptors);
// Default Interceptors
instanceAdvisor.getMetaData().addMetaData(InterceptorsFactory.class, "defaultInterceptors", defaultInterceptors);
Interceptors interceptorsAnnotation = (Interceptors) advisor.resolveAnnotation(Interceptors.class);
List<BusinessMethodInterceptorMethodInterceptor> classInterceptors = new ArrayList<BusinessMethodInterceptorMethodInterceptor>();
if(interceptorsAnnotation != null)
createInterceptors(advisor, interceptorFactory, interceptorsAnnotation.value(), classInterceptors, interceptors, lifeCycleInterceptors);
log.debug("Found class interceptors " + classInterceptors);
// Class Interceptors
instanceAdvisor.getMetaData().addMetaData(InterceptorsFactory.class, "classInterceptors", classInterceptors);
Class<?> beanClass = advisor.getClazz();
List<Interceptor> beanInterceptors = new ArrayList<Interceptor>();
for(Method beanMethod : ClassHelper.getAllMethods(beanClass))
{
interceptorsAnnotation = (Interceptors) advisor.resolveAnnotation(beanMethod, Interceptors.class);
if(interceptorsAnnotation != null)
{
List<Interceptor> businessMethodInterceptors = new ArrayList<Interceptor>();
// TODO: use visitors?
for(Class<?> interceptorClass : interceptorsAnnotation.value())
{
Object interceptor = interceptors.get(interceptorClass);
if(interceptor == null)
{
interceptor = interceptorFactory.create(advisor, interceptorClass);
interceptors.put(interceptorClass, interceptor);
}
//Advisor interceptorAdvisor = ((Advised) interceptor)._getAdvisor();
//Advisor interceptorAdvisor = advisor.getManager().getAdvisor(interceptorClass);
ExtendedAdvisor interceptorAdvisor = ExtendedAdvisorHelper.getExtendedAdvisor(advisor, interceptor);