All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.custardsource.parfait.spring.AdviceNotifier Maven / Gradle / Ivy

Go to download

Library enabling parfait timing collection around Spring beans using Spring AOP

There is a newer version: 0.3.11
Show newest version
package com.custardsource.parfait.spring;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.aop.Advisor;
import org.springframework.aop.aspectj.AbstractAspectJAdvice;
import org.springframework.aop.aspectj.AspectJPointcutAdvisor;
import org.springframework.aop.framework.Advised;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;

public class AdviceNotifier implements BeanPostProcessor {
	private static final Logger LOG = LoggerFactory.getLogger(AdviceNotifier.class);
	private final AdvisedAware aspect;

	public AdviceNotifier(AdvisedAware aspect) {
		this.aspect = aspect;
	}

	@Override
	public Object postProcessAfterInitialization(Object bean, String beanName)
			throws BeansException {
		if (bean instanceof Advised) {
			Advised advised = (Advised) bean;

			for (Advisor advisor : advised.getAdvisors()) {
				if (advisor instanceof AspectJPointcutAdvisor) {
					String foundName = ((AbstractAspectJAdvice) ((AspectJPointcutAdvisor) advisor)
							.getAdvice()).getAspectName();
					if (aspect.getName().equals(foundName)) {
						LOG.info(String.format("Found bean '%s' advised by %s; injecting", beanName, aspect));
						try {
							aspect.addAdvised(advised.getTargetSource().getTarget(), beanName);
						} catch (Exception e) {
							throw new RuntimeException(e);
						}
					}
				}
			}
		}
		return bean;
	}

	@Override
	public Object postProcessBeforeInitialization(Object bean, String beanName)
			throws BeansException {
		return bean;
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy