aop和interceptor也是spring项目中使用的较多的思想:
aop:面向切面编程,与我们传统的面向接口编程不同,当我们在使用面向接口编程时,若我们需要新的功能就向接口中添加新的方法,这样也可以满足我们的需求可是当我们的类很多的时候,假如有100个类实现了某一个接口,那么在我们更新功能时,就需要实现100个类,这就是传统的纵向扩展的短板,而面向切面编程,也就是aop,是横向扩展,将很多类都需要的共性的功能抽取出来,作为单独的一个面,在每个需要它的类运行之前,先运行这个切面,那么我们也实现了我们的需求,但是我们只做了一次变更。
aop中的概念:切面,切点,连接点,增强
连接点:就是在该方法运行前可以运行aop的方法
切点:真正运行了aop 的方法
增强:aop中具体的功能就是增强
切面:将增强运用到切点的过程
实现aop有xml方式和注解的方式
1.xml方式:
(1)编写一个类,不需要继承和实现任何类,eg:
public aop {
public void sys(){}
}
(2)将这个类注册到ioc容器中
<bean id="aop" class="com.lucheng.aop"/>
(3)xml文件中声明切面
<aop:config> <!--配置切点--> <aop:pointcut id="pointCut" expression="execution(* com.controller.aopController.get(..))"/> <aop:aspect ref="aops"> <!--配置前置增强--> <aop:before method="syso" pointcut-ref="pointCut"/> </aop:aspect> </aop:config>
这样一个切面就可以运行了
注解方式:
xml:
<aop:aspectj-autoproxy/>
类上:
@Aspect public class aopa { @Pointcut("execution(* com.controller.aopController.get(..))") public void pointCut(){} @Before("pointCut()") public void syso(){ System.out.println("进入切面了"); }
}