¢£Sample
¢¢composition
/
autoproxy|-/bin
|-/src
| |-/samplepackage
| | |- HelloOne.java
| | |- HelloTwo.java
| | |- HelloThree.java
| | |- HelloAdvice.java
| | |- Practitioner.java
|-/conf ¡¦¡¦¡¦ ÀßÄê¥Õ¥¡¥¤¥ë³ÊǼ¥Õ¥©¥ë¥À
| |- applicationContext.xml
| |- log4j.xml
|-/lib ¡¦¡¦¡¦ ¥é¥¤¥Ö¥é¥ê(³°ÉôJAR)¥Õ¥©¥ë¥À
| |- asm-attrs.jar
| |- cglib-2.1.3.jar
| |- commons-logging-1.0.4.jar
| |- log4j-1.2.11.jar
| |- spring-aop.jar
| |- spring-beans.jar
| |- spring-context.jar
| |- spring-core.jar
<'!-- ޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥ -->
¢¢Step01
AOP¤ò¤«¤±¤ëÂоݥ¯¥é¥¹¤òºîÀ®¤¹¤ë¡£
Âоݥ¯¥é¥¹
¡¦HelloOne.java
¡¦HelloTwo.java
¡¦HelloThree.java
¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦
package samplepackage;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* HelloOne¥¯¥é¥¹.
*/
public class HelloOne {
¡¡¡¡/** ¥í¥®¥ó¥° */
¡¡¡¡private Log logger = LogFactory.getLog(HelloOne.class);
¡¡¡¡/** ¥á¥Ã¥»¡¼¥¸ */
¡¡¡¡private String message;
¡¡¡¡/**
¡¡¡¡ * @return message ¤òÌ᤹¡£
¡¡¡¡ */
¡¡¡¡public String getMessage() {
¡¡¡¡¡¡¡¡return message;
¡¡¡¡}
¡¡¡¡/**
¡¡¡¡ * @param message message ¤òÀßÄꤹ¤ë¡£
¡¡¡¡ */
¡¡¡¡public void setMessage(String message) {
¡¡¡¡¡¡¡¡this.message = message;
¡¡¡¡}
¡¡¡¡/**
¡¡¡¡ * message¤ò½ÐÎϤ¹¤ë.
¡¡¡¡ */
¡¡¡¡public void message() {
¡¡¡¡¡¡¡¡logger.info(this.message);
¡¡¡¡}
}
¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦
package samplepackage;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* HelloTwo¥¯¥é¥¹.
*/
public class HelloTwo {
¡¡¡¡/** ¥í¥®¥ó¥° */
¡¡¡¡private Log logger = LogFactory.getLog(HelloTwo.class);
¡¡¡¡/** ¥á¥Ã¥»¡¼¥¸ */
¡¡¡¡private String message;
¡¡¡¡/**
¡¡¡¡ * @return message ¤òÌ᤹¡£
¡¡¡¡ */
¡¡¡¡public String getMessage() {
¡¡¡¡¡¡¡¡return message;
¡¡¡¡}
¡¡¡¡/**
¡¡¡¡ * @param message message ¤òÀßÄꤹ¤ë¡£
¡¡¡¡ */
¡¡¡¡public void setMessage(String message) {
¡¡¡¡¡¡¡¡this.message = message;
¡¡¡¡}
¡¡¡¡/**
¡¡¡¡ * message¤ò½ÐÎϤ¹¤ë.
¡¡¡¡ */
¡¡¡¡public void message() {
¡¡¡¡¡¡¡¡logger.info(this.message);
¡¡¡¡}
}
¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦
package samplepackage;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* HelloThree¥¯¥é¥¹.
*/
public class HelloThree {
¡¡¡¡/** ¥í¥®¥ó¥° */
¡¡¡¡private Log logger = LogFactory.getLog(HelloThree.class);
¡¡¡¡/** ¥á¥Ã¥»¡¼¥¸ */
¡¡¡¡private String message;
¡¡¡¡/**
¡¡¡¡ * @return message ¤òÌ᤹¡£
¡¡¡¡ */
¡¡¡¡public String getMessage() {
¡¡¡¡¡¡¡¡return message;
¡¡¡¡}
¡¡¡¡/**
¡¡¡¡ * @param message message ¤òÀßÄꤹ¤ë¡£
¡¡¡¡ */
¡¡¡¡public void setMessage(String message) {
¡¡¡¡¡¡¡¡this.message = message;
¡¡¡¡}
¡¡¡¡/**
¡¡¡¡ * message¤ò½ÐÎϤ¹¤ë.
¡¡¡¡ */
¡¡¡¡public void message() {
¡¡¡¡¡¡¡¡logger.info(this.message);
¡¡¡¡}
}
<'!-- ޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥ -->
¢¢Step02
AOP¤Ë»ÈÍѤ¹¤ë¥¢¥É¥Ð¥¤¥¹¥¯¥é¥¹¤òºîÀ®¤¹¤ë¡£
¡¦HelloAdvice.java
AOP¤ò¥á¥½¥Ã¥É¤ÎÁ°¸å¤Ë¤«¤±¤ëAroundAdvice¤ò»ÈÍѤ¹¤ë¾ì¹ç¡¢¥¢¥É¥Ð¥¤¥¹¥¯¥é¥¹¤ÏMethodInteceptor¤ò¼ÂÁõ¤·¤ÆºîÀ®¤¹¤ë¡£
¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦
package samplepackage;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* HelloAdvice¥¯¥é¥¹.
*/
public class HelloAdvice implements MethodInterceptor {
¡¡¡¡/** ¥í¥®¥ó¥° */
¡¡¡¡private Log logger = LogFactory.getLog(HelloAdvice.class);
¡¡¡¡/* (Èó Javadoc)
¡¡¡¡ * @see org.aopalliance.intercept.MethodInterceptor#invoke(org.aopalliance.intercept.MethodInvocation)
¡¡¡¡ */
¡¡¡¡public Object invoke(MethodInvocation invocation) throws Throwable {
//¡¡¡¡¡¡¡¡joinpoint¤ÎÁ°½èÍý
¡¡¡¡¡¡¡¡logger.info("Á°½èÍý");
//¡¡¡¡¡¡¡¡´ÉÍý¤¹¤ë¥¯¥é¥¹¤Î¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤¹
¡¡¡¡¡¡¡¡Object result = invocation.proceed();
//¡¡¡¡¡¡¡¡joinpoint¤Î¸å½èÍý
¡¡¡¡¡¡¡¡logger.info("¸å½èÍý");
¡¡¡¡¡¡¡¡return result;
¡¡¡¡}
}
<'!-- ޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥ -->
¢¢Step03
ÄêµÁ¥Õ¥¡¥¤¥ë¤ËÄêµÁ¤¹¤ë¡£
¡¦applicationContext.xml
¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦
<'?xml version="1.0" encoding="UTF-8"?>
<'!DOCTYPE beans PUBLIC
"-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<'beans>
¡¡¡¡<'!--AutoProxyBean
¡¡¡¡¡¡¡¡<'bean
¡¡¡¡¡¡¡¡id="defaultAdvisorAutoProxy"
¡¡¡¡¡¡¡¡class="org.
springframework.aop.framework.
autoproxy.DefaultAdvisorAutoProxyCreator">
¡¡¡¡¡¡¡¡<'property name="proxyTargetClass">
¡¡¡¡¡¡¡¡<'value>true<'/value>
¡¡¡¡¡¡¡¡<'/property>
¡¡¡¡¡¡¡¡<'/bean>
¡¡¡¡-->
¡¡¡¡<'!-- AutoProxyBean -->
¡¡¡¡<'!-- ¢¨interceptorNames¡¢beanNames°À¤Ë¡¢ref»ØÄê¤ÏÉԲġ£¡ÊBean¤Ç¤Ê¤¯¡¢Bean̾¤òÅϤ¹¡£¡Ë -->
¡¡¡¡<'bean id="beanNameAutoProxy"
¡¡¡¡¡¡¡¡class="org.
springframework.aop.framework.
autoproxy.
BeanNameAutoProxyCreator">
¡¡¡¡¡¡¡¡<'property name="beanNames">
¡¡¡¡¡¡¡¡¡¡¡¡<'value>*e<'/value>
¡¡¡¡¡¡¡¡<'/property>
¡¡¡¡¡¡¡¡<'property name="interceptorNames">
¡¡¡¡¡¡¡¡¡¡¡¡<'value>helloAdvisor<'/value>
¡¡¡¡¡¡¡¡<'/property>
¡¡¡¡<'/bean>
¡¡¡¡<'!-- "
AOP¤¹¤ë¥¢¥É¥Ð¥¤¥¹¥¯¥é¥¹"¤ò"
AOPÂоݥ¯¥é¥¹"¤Ë¹çÂΤµ¤»¤ë¥¢¥É¥Ð¥¤¥¶¡¼¥¯¥é¥¹ -->
¡¡¡¡<'!-- ¤É¤Î¥¯¥é¥¹¤Ë¡¢¤É¤¦¤æ¤¦¥ë¡¼¥ë¤Ç¡¢¤É¤Î¥¢¥É¥Ð¥¤¥¹¤ò¹çÂΤµ¤»¤ë¤«Åù¤Î¾ðÊó¤òÊÝ»ý¤·¤Æ¤¤¤ë¡£ -->
¡¡¡¡<'bean id="helloAdvisor"
¡¡¡¡¡¡¡¡class="org.
springframework.aop.support.NameMatchMethodPointcutAdvisor">
¡¡¡¡¡¡¡¡<'property name="advice">
¡¡¡¡¡¡¡¡¡¡¡¡<'ref local="helloAdvice" />
¡¡¡¡¡¡¡¡<'/property>
¡¡¡¡¡¡¡¡<'property name="mappedName">
¡¡¡¡¡¡¡¡¡¡¡¡<'value>*message<'/value>
¡¡¡¡¡¡¡¡<'/property>
¡¡¡¡<'/bean>
¡¡¡¡<'!--
AOP¤¹¤ë¥¢¥É¥Ð¥¤¥¹¥¯¥é¥¹ -->
¡¡¡¡<'bean id="helloAdvice"
¡¡¡¡¡¡¡¡class="samplepackage.HelloAdvice" />
¡¡¡¡<'!--
AOPÂоݥ¯¥é¥¹ -->
¡¡¡¡<'bean id="helloOne"
¡¡¡¡¡¡¡¡class="samplepackage.HelloOne">
¡¡¡¡¡¡¡¡<'property name="message">
¡¡¡¡¡¡¡¡¡¡¡¡<'value>Hello,
AOP!! one<'/value>
¡¡¡¡¡¡¡¡<'/property>
¡¡¡¡<'/bean>
¡¡¡¡<'bean id="helloTwo"
¡¡¡¡¡¡¡¡class="samplepackage.HelloTwo">
¡¡¡¡¡¡¡¡<'property name="message">
¡¡¡¡¡¡¡¡¡¡¡¡<'value>Hello,
AOP!! two<'/value>
¡¡¡¡¡¡¡¡<'/property>
¡¡¡¡<'/bean>
¡¡¡¡<'bean id="helloThree"
¡¡¡¡¡¡¡¡class="samplepackage.HelloThree">
¡¡¡¡¡¡¡¡<'property name="message">
¡¡¡¡¡¡¡¡¡¡¡¡<'value>Hello,
AOP!! three<'/value>
¡¡¡¡¡¡¡¡<'/property>
¡¡¡¡<'/bean>
<'/beans>
<'!-- ޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥ -->
¢¢Step04
¼ÂÁ©¥¯¥é¥¹¤òºîÀ®¤¹¤ë¡£Íפϥᥤ¥ó¥¯¥é¥¹¡£
¡¦Practitioner.java
¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦
package samplepackage;
import org.
springframework.context.ApplicationContext;
import org.
springframework.context.support.ClassPathXmlApplicationContext;
/**
* Practitioner¥¯¥é¥¹.
*
*/
public class Practitioner {
¡¡¡¡public static void main(String args[]) {
¡¡¡¡¡¡¡¡try {
¡¡¡¡¡¡¡¡¡¡¡¡ApplicationContext context = new ClassPathXmlApplicationContext(
¡¡¡¡¡¡¡¡¡¡¡¡"applicationContext.xml");
¡¡¡¡¡¡¡¡¡¡¡¡HelloOne helloOne = (HelloOne) context.getBean("helloOne");
¡¡¡¡¡¡¡¡¡¡¡¡HelloTwo helloTwo = (HelloTwo) context.getBean("helloTwo");
¡¡¡¡¡¡¡¡¡¡¡¡HelloThree helloThree = (HelloThree) context.getBean("helloThree");
¡¡¡¡¡¡¡¡¡¡¡¡helloOne.message();
¡¡¡¡¡¡¡¡¡¡¡¡helloTwo.message();
¡¡¡¡¡¡¡¡¡¡¡¡helloThree.message();
¡¡¡¡¡¡¡¡} catch (Exception e) {
¡¡¡¡¡¡¡¡¡¡¡¡e.printStackTrace();
¡¡¡¡¡¡¡¡}
¡¡¡¡}
}
<'!-- ޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥ -->
¢¢Step5
·ë²Ì¤ò³Îǧ¤¹¤ë¡£
¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦
core.CollectionFactory:66 - JDK 1.4+ collections available
xml.XmlBeanDefinitionReader:163 - Loading XML bean definitions from class path resource [applicationContext.xml]
support.AbstractRefreshableApplicationContext:92 - Bean factory for application context [org.
springframework.context.support.ClassPathXmlApplicationContext;has hCode=9142687]: org.
springframework.beans.factory.support.DefaultListableBeanFactory defining beans [beanNameAutoProxy,helloAdvisor,helloAdvice,helloOne,helloT wo,helloThree]; root of BeanFactory hierarchy
support.AbstractApplicationContext:290 - 6 beans defined in application context [org.
springframework.context.support.ClassPathXmlApplicationContext;hashCode=91 42687]
framework.DefaultAopProxyFactory:59 - CGLIB2 available: proxyTargetClass feature enabled
support.AbstractApplicationContext$BeanPostProcessorChecker:738 - Bean 'beanNameAutoProxy' is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
support.AbstractApplicationContext:432 - Unable to locate MessageSource with name 'messageSource': using default [org.
springframework.context.support.Delegatin gMessageSource@a4e2e3]
support.AbstractApplicationContext:454 - Unable to locate ApplicationEventMulticaster with name 'applicationEventMulticaster': using default [org.springframewo rk.context.event.SimpleApplicationEventMulticaster@fd68b1]
support.DefaultListableBeanFactory:268 - Pre-instantiating singletons in factory [org.
springframework.beans.factory.support.DefaultListableBeanFactory defining beans [beanNameAutoProxy,helloAdvisor,helloAdvice,helloOne,helloTwo,helloThree]; root of BeanFactory hierarchy]
autoproxy.HelloAdvice:26 - Á°½èÍý
autoproxy.HelloOne:39 - Hello,
AOP!! one
autoproxy.HelloAdvice:30 - ¸å½èÍý
autoproxy.HelloTwo:39 - Hello,
AOP!! two
autoproxy.HelloAdvice:26 - Á°½èÍý
autoproxy.HelloThree:39 - Hello,
AOP!! three
autoproxy.HelloAdvice:30 - ¸å½èÍý
<'!-- ޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥޥ -->
ref:
Spring/
AOP ÍøÍÑÎã/Auto Proxy
http://www.system-trust.com/pukiwiki/?Spring%2FAOP%20%CD%F8%CD%D1%CE%E3%2FAuto%20Proxy