package spring.sample.aop.proxy;

import spring.sample.aop.*;

import org.springframework.aop.framework.ProxyFactory;

/**
 * Spring AOPの Before AdviceとAround Adviceのサンプルです。<br>
 * <PRE>
 *   Before AdviceはJoinpointの前に実行するAdviceです
 * 　Around AdviceはJoinpointの前後で実行されるAdviceです。
 * 
 * 　(サンプルで登場するAOPの概念と、サンプルでのクラス名)
 * 　Around Advice :  LogAroundInterceptorクラス
 * 　Before Advice :  LogBeforeAdviceクラス
 * 　Pointcut      :  LogPointcutAdvisorクラスに含まれています
 *   Advisor	   :  LogPointcutAdvisorクラス
 * </PRE>
 * @author MBeans
 * @version 1.0
 */
public class BeforeAdviceSample {

	public static void main(String[] args) {
		try {

			MameTestBean target = new MameTestBean();
			ProxyFactory factory = new ProxyFactory(target);
						
			LogAroundInterceptor interceptor = new LogAroundInterceptor();
			LogBeforeAdvice advice = new LogBeforeAdvice();
			LogPointcutAdvisor advisor = new LogPointcutAdvisor();
			advisor.setAdvice(advice);
			factory.addAdvisor(advisor);
			factory.addInterceptor(interceptor);

			IMameTestBean proxied = (IMameTestBean) factory.getProxy();

			proxied.setName("0");
			proxied.getName();
			proxied.setName("1");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
