1、引入jar包
org.springframework
spring-aop
4.3.13.RELEASE
2、编写业务类
@Service
public class MemberManagerService {
public void addMember(Member member){
System.out.println("增加一个用户");
}
public void updateMember(Member member){
System.out.println("修改用户");
}
public void deleteMember(String name){
System.out.println("删除用户");
}
public Member queryMember(String name){
System.out.println("查询用户");
return null;
}
}
3、编写切面类
public class LogAspect {
public void before(JoinPoint joinPoint){
System.out.println("调用方法之前执行:" );
}
public void after(JoinPoint joinPoint){
System.out.println("调用方法之后执行:" + joinPoint);
}
public Member afterReturn(JoinPoint joinPoint){
System.out.println("调用获得返回值之后执行:" + joinPoint);
return null;
}
public void afterThrow(JoinPoint joinPoint){
System.out.println("调用抛出异常之后执行:" + joinPoint);
}
}
4、编写配置
<aop:aspectj-autoproxy proxy-target-class=“true” />
aop:config
<aop:aspect ref=“logAspect”>
<aop:pointcut expression=“execution(* com.zyren.service…*(…))” id=“pointcut”/>
<aop:before method=“before” pointcut-ref=“pointcut”/>
<aop:after method=“after” pointcut-ref = “pointcut”/>
<aop:after-returning method=“afterReturn” returning=“com.zyren.model.Member” pointcut-ref = “pointcut”/>
<aop:after-throwing method=“afterThrow” pointcut-ref = “pointcut”/>
</aop:aspect>
</aop:config>
5、编写junit 测试代码
@ContextConfiguration(locations=“classpath:application.xml”)
@RunWith(SpringJUnit4ClassRunner.class)
public class MemberManagerServiceTest {
@Autowired
private MemberManagerService memberManagerService;
@Test
public void testAddMember(){
memberManagerService.addMember(null);
}
/*public void testUpdateMember(){
memberManagerService.updateMember(null);
}
public void testDeleteMember(){
memberManagerService.deleteMember(null);
}*/
@Test
public void testqueryMember(){
memberManagerService.queryMember(null);
}
}
6、遇到的问题
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.aop.aspectj.AspectJPointcutAdvisor]: Constructor threw exception; nested exception is java.lang.IllegalArgumentException: error at ::0 formal unbound in pointcut
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:154)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:122)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:271)
… 76 more
Caused by: java.lang.IllegalArgumentException: error at ::0 formal unbound in pointcut
at org.aspectj.weaver.tools.PointcutParser.parsePointcutExpression(PointcutParser.java:301)
at org.springframework.aop.aspectj.AspectJExpressionPointcut.buildPointcutExpression(AspectJExpressionPointcut.java:217)
at org.springframework.aop.aspectj.AspectJExpressionPointcut.checkReadyToMatch(AspectJExpressionPointcut.java:190)
at org.springframework.aop.aspectj.AspectJExpressionPointcut.getMethodMatcher(AspectJExpressionPointcut.java:175)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.buildSafePointcut(AbstractAspectJAdvice.java:196)
at org.springframework.aop.aspectj.AspectJPointcutAdvisor.(AspectJPointcutAdvisor.java:50)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142)
… 78 more
原因:切面类中的JoinPoint 引错了包(import org.aopalliance.intercept.Joinpoint;)
应该引入的包是org.aspectj.lang.JoinPoint;