一xml配置方式
1、
AOPBean.java
package com.weixun.bean;
public class AOPBean {
public void display() {
System.out.println("AOPBean.display()");
}
}
2、LoggerBean.java
package com.weixun.bean;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
@Aspect
public class LoggerBean {
@Pointcut("execution(public * *(..)) and !execution(* com.weixun.bean.LoggerBean.*(..))")
public void log(){}
@Around("log()")
public Object aroundLogCalls(ProceedingJoinPoint joinPoint) throws Throwable{
System.out.println("处理前"+joinPoint.getSignature().getName());
Object obj=joinPoint.proceed();
System.out.println("处理后"+joinPoint.getSignature().getName());
return obj;
}
}
3、AOPBeans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
<aop:config>
<aop:pointcut id="loggerCalls"
expression="execution(public * *(..)) and !execution(* com.weixun.bean.LoggerBean.*(..))"/>
<aop:aspect id="logAspect" ref="loggerBean">
<aop:around pointcut-ref="loggerCalls" method="aroundLogCalls"/>
</aop:aspect>
</aop:config>
<bean id="loggerBean" class="com.weixun.bean.LoggerBean"/>
<bean id="aopBean" class="com.weixun.bean.AOPBean"/>
</beans>
4、TestAop.java
package com.weixun.bean;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestAop {
public static void main(String[] args) {
ClassPathXmlApplicationContext factory = new ClassPathXmlApplicationContext(
"AOPBeans.xml");
AOPBean iocService = (AOPBean) factory.getBean("aopBean");
iocService.display();
}
}
二、annotation方式
1、AOPBean.java
package com.weixun.bean;
public class AOPBean {
public void display() {
System.out.println("AOPBean.display()");
}
}
2、LoggerBean.java
package com.weixun.bean;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
@Aspect
public class LoggerBean {
@Pointcut("execution(public * *(..)) and !execution(* com.weixun.bean.LoggerBean.*(..))")
public void log(){}
@Around("log()")
public Object aroundLogCalls(ProceedingJoinPoint joinPoint) throws Throwable{
System.out.println("处理前"+joinPoint.getSignature().getName());
Object obj=joinPoint.proceed();
System.out.println("处理后"+joinPoint.getSignature().getName());
return obj;
}
}
3、AOPBeans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
<aop:aspectj-autoproxy />
<bean id="loggerBean" class="com.weixun.bean.LoggerBean"/>
<bean id="aopBean" class="com.weixun.bean.AOPBean"/>
</beans>
4、TestAop.java
package com.weixun.bean;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestAop {
public static void main(String[] args) {
ClassPathXmlApplicationContext factory = new ClassPathXmlApplicationContext(
"AOPBeans.xml");
AOPBean iocService = (AOPBean) factory.getBean("aopBean");
iocService.display();
}
}