Spring****——AOP、后置通知、注解形式的AOP、Schema形式的AOP
AOP的一些名词:
面向对象编程:例如有3个文件,里面有一些属性、类、方法,其中有同样的方法XXX()和XX(),为了简化代码,将XXX()和XX()放到一个函数下面X()这时这3个文件如果想调用这两个方法时可以直接调用X()方法,但是这里有弊端,如果X()方法改名字的话,那么3个调用处也将要更改方法的名称,如果X()方法原本是在add()方法之后调用的,现在想在add()方法之前调用,那么这三个文件都要依次更改调用X()方法的位置,未免过于复杂;
面向切面编程(AOP):如上例子,可以写一个配置文件,,规定X()方法在add()方法之后调用,如果X()方法的位置发生变动,只需要更改配置声明文件即可,不用对具体代码进行更改;对于X()方法改名问题,可以规定在add()方法之后自动调用X()方法,而不必去管X的名称,因为此时X()方法是作为一个切入点放到具体的文件中去的;
xml方式的通知类型:
后置通知:
通过接口将类变为通知;
- 通知类(类 -> 通知类):普通实现接口;
- 业务类:业类务方法,StudentServiecImp1中的addStudent();
- 配置:首先将业务类、通知纳入springIOC容器;然后定义切入点(一端)、定义通知类(另一端),通过 pointcut-ref 将两端连接起来
基于注解形式的AOP实现:
通过注释将类变为通知;
- jar:引入架包;
- 配置:首先将业务类、通知纳入springIOC容器;然后开启注解对AOP的支持,
范例:编写通知并加入IOC容器
范例:开启注解对AOP的支持
利用注解方式的AOP时不要忘记开启扫描器,不然注解不会生效:
其中扫描器只对@Component、@Service、@Respository、@Controller修饰的类产生影响;
基于Schema形式的AOP实现:
通过配置将类变为通知;
类似于实现接口的方式;首先编写一个普通类,然后通过配置将该类变成一个通知类;
范例:编写一个普通类
范例:配置将其变为一个通知类