使用注解的方式实现AOP:
1、业务类
PersonService.java
PersonServiceimpl.java
3、注解实现
MyInterceptor.java
SpringAOPTest.java
1、业务类
PersonService.java
/*
*@Author swxctx
*@time 2016年9月22日
*/
package com.sw.service;
public interface PersonService {
//业务方法
public void save(String name);
public void update(String name,Integer id);
public String getPersonName();
}
2、业务实现
PersonServiceimpl.java
/*
*@Author swxctx
*@time 2016年9月22日
*/
package com.sw.serv.impl;
import com.sw.service.PersonService;
public class PersonServiceimpl implements PersonService {
//业务实现
@Override
public void save(String name) {
// TODO Auto-generated method stub
System.out.println("save-method-execute");
}
@Override
public void update(String name, Integer id) {
// TODO Auto-generated method stub
System.out.println("update-method-execute");
}
@Override
public String getPersonName() {
// TODO Auto-generated method stub
return "xxx";
}
}
3、注解实现
MyInterceptor.java
/*
*@Author swxctx
*@time 2016年9月22日
*/
package com.sw.service;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
//声明为切面
@Aspect
public class MyInterceptor {
@Pointcut("execution(*com.sw.serv.impl.PersonServiceimpl.*(..))")
private void anyMethod(){}//声明一个切入点
@Before("anyMethod()&&args(name)")
public void doAccessCheck(String name) {//定义前置通知
System.out.println("前置通知");
}
@AfterReturning("anyMethod()")
public void doAfterReturning(){
System.out.println("后置通知");
}
@After("anyMethod()")
public void doAfter(){
System.out.println("最终通知");
}
@AfterThrowing("anyMethod()")
public void doAfterThrow(){
System.out.println("例外通知");
}
@Around("anyMethod()")
public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable{
System.out.println("进入方法");
Object result = pjp.proceed();
System.out.println("退出方法");
return result;
}
}
4、配置文件
bean.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.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
<aop:aspectj-autoproxy/>
<bean id="myInterceptor" class="com.sw.service.MyInterceptor"/>
<bean id="personService" class="com.sw.servicce.PersonService"></bean>
</beans>
5、测试
SpringAOPTest.java
/*
*@Author swxctx
*@time 2016年9月22日
*/
package com.sw.iunit.test;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.sw.service.PersonService;
public class SpringAOPTest {
@BeforeClass
public static void setUpBeforeClass() throws Exception {
}
@Test
public void interceptorTest() {
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
PersonService personService = (PersonService)ctx.getBean("personService");
personService.save("xxx");
}
}