项目结构一览:
导入jar并build path:
切入点的类:
package com.hpe.po;
import org.springframework.stereotype.Component;
@Component(value="person")
public class Person {
// 需求,在打eating之前,打印方法开始
// 打印eating只后,打印方法结束
public void eat() {
System.out.println("eat....");
}
public void drunk() {
System.out.println("drunk....");
}
public void drunkBear() {
System.out.println("drunkBear....");
}
public void play() {
System.out.println("play....");
}
}
增强类:
package com.hpe.po;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
//在增强类上使用aspect
@Component(value="myAdvice")
@Aspect
public class MyAdvice {
//在方法上使用注解来配置增强通知(前置,后置)
//value的值是切入点,也就是表达式
@Before(value="execution(* com.hpe.po.Person.eat(..))")
public void before() {
System.out.println("方法开始");
}
@After(value="execution(* com.hpe.po.Person.drunk(..))")
public void end() {
System.out.println("方法结束");
}
public void final1() {
System.out.println("方法结束");
}
@Around(value="execution(* com.hpe.po.Person.play(..))")
public void around(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("方法bigin");
joinPoint.proceed();
System.out.println("方法end");
}
}
配置文件:
<?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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
">
<!-- xml方式实现aop -->
<context:component-scan base-package="com.hpe"></context:component-scan>
<!-- <bean id="person" class="com.hpe.po.Person"></bean>
<bean id="myAdvice" class="com.hpe.po.MyAdvice"></bean> -->
</beans>
日志文件:
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
测试类:
package com.hpe.test;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.hpe.po.Person;
public class AOPTest {
@Test
public void test1(){
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
//Persion p=(Persion)context.getBean("persion1");
Person person = context.getBean("person", Person.class);
person.eat();
person.drunk();
person.play();
}
}