简单写写关于AOP切入点的表达方式和通知类型
通知类型:其中异常通知较简单便不做演示
<!--编写切面类的配置-->
<bean id="myAspectXml" class="com.qyh.demo2.MyAspectXml"/>
<!--配置AOP-->
<aop:config>
<!--配置切面类:切入点+通知(类型)-->
<aop:aspect ref="myAspectXml">
<!--前置通知,在save方法执行之前,增强的方法会执行-->
<!--切入点的表达式 execution(public void com.qyh.demo2.CustomerImpl.save())-->
<!-- <aop:before method="log" pointcut="execution(public void com.qyh.demo2.CustomerDaoImpl.save())"/>-->
<!--最终通知-->
<!--<aop:after method="after" pointcut="execution(public void com.qyh.demo2.CustomerDaoImpl.save())"/>-->
<!--后置通知-->
<!-- <aop:after-returning method="afterReturn" pointcut="execution(public void com.qyh.demo2.CustomerDaoImpl.save())"/>-->
<!--环绕通知-->
<aop:around method="around" pointcut="execution(public void com.qyh.demo2.CustomerDaoImpl.save())"/>
</aop:aspect>
</aop:config>
切入点表达方式
<!--配置AOP-->
<aop:config>
<!--配置切面类:切入点+通知(类型)-->
<aop:aspect ref="myAspectXml">
<!--切入点的表达式
1.execution() 固定的,不能不写
2.public 可以省略不写
3.void 返回值可以出现*表示任意返回值 返回值类型不能不写
4.包名可以用*代替 不能不写,简写方式:*..*
5.类 简写:*DaoImpl
6.方法 简写:save*()
7.方法的参数:save(..),..:代表任意参数,*:代表一个参数
-->
<!--<aop:before method="log" pointcut="execution(public void com.qyh.demo2.CustomerDaoImpl.save())"/>-->
<!--2.public 可以省略不写-->
<!--<aop:before method="log" pointcut="execution(void com.qyh.demo2.CustomerDaoImpl.save())"/>-->
<!--void 返回值可以出现*表示任意返回值 返回值类型不能不写-->
<!-- <aop:before method="log" pointcut="execution(* com.qyh.demo2.CustomerDaoImpl.save())"/>-->
<!--包名可以用*代替 不能不写,简写方式:*..*-->
<!-- <aop:before method="log" pointcut="execution(* com.qyh.*.CustomerDaoImpl.save())"/>-->
<!--简写方式:*..* 任意的包结构-->
<!--<aop:before method="log" pointcut="execution(* *..*.CustomerDaoImpl.save())"/>-->
<!--类 简写:*DaoImpl-->
<!-- <aop:before method="log" pointcut="execution(* *..*.*DaoImpl.save())"/>-->
<!--方法 简写:save*()-->
<!--<aop:before method="log" pointcut="execution(* *..*.*DaoImpl.save*())"/>-->
<!--方法的参数:save(..),..:代表任意参数,*:代表一个参数-->
<aop:before method="log" pointcut="execution(* *..*.*DaoImpl.save*())"/>
</aop:aspect>
</aop:config>