前面讲了关于xml配置文件实现aop的方式,但是还是没有注释方便。
@Component() //配置bean,不写名字,默认为类名首字母小写
@Aspect //相当于aop:aspect 标签
public class LoggerUtil {
@Pointcut("execution (* com.javalong.spring.day02.*.*(..))") //aop:pointcut
public void servicePoint(){}
@Around("servicePoint()") //aop:around
public void log(ProceedingJoinPoint pjp) throws Throwable{
System.out.println("记录前~~~~~~~~~~~~");
pjp.proceed();
System.out.println("记录后~~~~~~~~~~~~");
}
}
//配置非常简单,
不过还有一点需要提出的是,需要在配置文件中加上:
<aop:aspectj-autoproxy/>。
运行 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userDaoImpl2' defined in file [E:\spring\sts-bundle\workspace\HelloWorld\bin\com\javalong\spring\day02\UserDaoImpl.class]: Initialization of bean failed; nested exception is java.lang.IllegalArgumentException: error at ::0 can't find referenced pointcut servicePoint
报错。
error at ::0 can't find referenced pointcut servicePoint
找不到切点servicePoint。
代码改为
@Around("execution (* com.javalong.spring.day02.*.*(..))")
public void log(ProceedingJoinPoint pjp) throws Throwable{
System.out.println("记录前~~~~~~~~~~~~");
pjp.proceed();
System.out.println("记录后~~~~~~~~~~~~");
}
成功~~
网上说 是jdk问题,还有换aspectj.jar貌似都没用。
这个是环绕通知,其他通知差不多,就不一一举例了。