理解:AOP就是让我们专心做事
核心概念:
1)连接点:在程序执行过程中明确的点,例如:方法被调用,异常被抛出等等
2)目标:被通知被代理的对象(完成具体核心业务逻辑的方法)
3)通知:在某个特定的连接点上所执行的动作
4)代理:将通知应用到目标上所创建的对象叫做代理对象(代理=通知+目标)
注:只有代理对象具备完整的AOP特性,而AOP代码是写在通知中
5)切入点:多个连接点的集合,将通知应用到哪些连接点上
注:切入点相当于是一个匹配条件,只有满足条件的连接点才会将通知应用到目标上
6)适配器:通知+切入点(通知将会根据切入点的匹配要求应用到具体的目标上1、初始化Spring上下文容器(IOC) ApplicationContext ac= new ClassPathXmlApplicationContext("spring.xml");
示例一:前置通知
示例二:后置通知
示例三:环绕通知
示例四:异常通知
示例五:适配器=通知+切入点
获取Spring上下文中的代理对象
A=IBookBizImpl B=BookBizImpl C=Proxy
BookBizImpl 实现了IBookBiz
Proxy 实现了IBookBiz BookBizImpl obj=(BookBizImpl)Proxy;
错误方式: com.zking.spring02.biz.BookBizImpl
BookBizImpl proxy = ac.getBean("proxy", BookBizImpl.class);
正确方式:用接口接收代理对象,满足里氏替换原则
IBookBiz proxy = ac.getBean("proxy", IBookBiz.class);
System.out.println(proxy.getClass());
spring.xml
<!--目标-->
<bean id="bookBizTarget"
<!--通知-->
<bean id="before/after..."
<!--代理对象-->
<bean id="proxy" class="....">
<!--目标-->
<!--通知-->
<!--指定所生产的代理对象实现的接口-->
</bean>
将通知+目标应用到代理对象的工厂类上