面向切面编程:SpringAOP--注解的方式
研究spring这么久,就写写个人觉得比较有意思的东西----面向切面编程
切面类:
//定义切面
@Aspect
public class MyInterceptor {
//定义切入点,定义切入点及声明切入点
@Pointcut("execution(* com.sise.spring.service.impl.PersonServiceBean.add(..))")
private void add(){}
//定义前置通知
@Before("add()")
public void doBeforeMethod(){//方法名任意
System.out.println("add()方法的前置通知!");
}
//定义后置通知
@AfterReturning("add()")
public void doAfterReturning(){//方法名任意
System.out.println("add()方法的后置通知!");
}
//定义异常通知
@AfterThrowing("add()")
public void doAfterThrowing(){//方法名任意
System.out.println("add()方法的异常通知!");
}
//定义最终通知
@After("add()")
public void doAfter(){//方法名任意
System.out.println("add()方法的最终通知!");
}
//定义环绕通知
@Around("add()")
public Object add_doAround(ProceedingJoinPoint pjp)throws Throwable{//方法名任意
System.out.println("add()方法的环绕通知:进入方法");
Object result=pjp.proceed();//这个步骤作用是进入到你要切的那个方法中去执行它,执行完再出来
System.out.println("add()方法的环绕通知:退出方法");
return result;
}
}
服务类接口:
public interface PersonService {
public void add(); //定义一个方法}
服务类实现类:
public class PersonServiceBean implements PersonService{
@Override
public void add() {
System.out.println("执行add()!");
}
}
配置文件:
<?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.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd ">
<aop:aspectj-autoproxy/>
<bean id="myInterceptor" class="com.sise.spring.aop.MyInterceptor" /> //切面类的bean
<bean id="personService" class="com.sise.spring.service.impl.PersonServiceBean" />//实现类的bean
</beans>
测试类:
public class SpringAopTest {
public static void main(String[] args) {
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
PersonService personService=(PersonService) ctx.getBean("personService");
personService.add();
System.out.println(".........................");
}
}
输出的结果:
add()方法的环绕通知:进入方法
add()方法的前置通知!
执行add()!
add()方法的环绕通知:退出方法
add()方法的最终通知!
add()方法的后置通知!
.........................
从输出结果可以看出来,面向切面编程就是在执行你所想执行的业务之前,先去进行一些操作,然后执行完你的业务之后也可以 进行一系列的操作,用来做权限拦截会很适合
个人认为,注解配置是最简洁也是最易读懂的方式,第一篇,还有有点意思写得<Z>
- Spring——AOP(面向切面编程)@AspectJ注解方式
- Spring——AOP(面向切面编程)@AspectJ注解方式
- Spring——使用Spring的注解方式实现面向切面技术AOP
- Spring学习4-面向切面(AOP)之aspectj注解方式
- spring实战-基于注解的面向切面编程(AOP)
- Spring AOP面向切面编程详解(基于XML方式 注解方式 注入Aspectj方式)
- Spring面向切面编程(AOP)方式二
- Spring学习4-面向切面(AOP)之aspectj注解方式
- Spring基于注解的零配置方式的面向切面编程
- spring framework面向切面编程示例(基于注解):spring-aop
- Spring基础、IOC(控制反转)、AOP(面向切面编程)、Log4j、注解配置
- Spring基础、IOC(控制反转)、AOP(面向切面编程)、Log4j、注解配置
- Spring面向切面编程——Spring实现AOP方式——通过注解实现
- Spring学习一:IOC(控制反转)和AOP(面向切面)的xml配置和注解方式
- Spring之注解实现aop(面向切面编程)
- 面向切面(AOP)之Spring接口方式 schema配置方式 aspectj注解方式
- spring学习笔记7--使用spring进行面向切面的(AOP)编程(1)注解方式实现
- Spring之注解实现aop(面向切面编程)
- Spring之注解实现aop(面向切面编程)
- Spring之注解实现aop(面向切面编程)