Spring AOP(面向切面)实例及步骤

来源:互联网 发布:淘宝宝贝发布物流 编辑:程序博客网 时间:2024/06/09 22:27

Spring AOP(面向切面)实例及步骤

重要概念
切面
切面就是在程序中抽象出来的一个个通用的功能的类。比如:日志、事务、异常处理、性能监控、统计。
连接点
连接点就是对植入通过功能的地方的一个封装。就是切面中发放的输入参数。
通知
通知就是切面类当中具体事项功能的方法
切入点
切入点就是需要添加切面功能的地方,是消息执行的地方。
来一个示例:
1、建一个java项目
2、导入jar包并且buildPath
3、编写spring配置文件(applicationContext.xml)
eg:

<?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"> <!-- bean definitions here -->    <!-- <bean id="menuService" class="com.linksky.daoImpl.MenuService"></bean> -->    <bean id="UserService" class="com.linksky.service.UserService">        <property name="userdao" ref="sqlserverDao"></property>    </bean>    <bean id="sqlserverDao" class="com.linksky.daoImpl.SqlServerUserDao"></bean>    <bean id="mysqlDao" class="com.linksky.daoImpl.MysqlUserDao"></bean></beans>

4、编写切面类,并且进行相应配置
eg:

<!-- 在Spring当中声明切面 -->    <bean id="log" class="com.linksky.aspect.LogAspect"></bean>    <!-- 配置aspect作为动态代理的实现 -->    <aop:aspectj-autoproxy></aop:aspectj-autoproxy>    <!-- 配置Aop -->    <aop:config>        <!-- 切点配置 -->        <aop:pointcut expression="execution(* com.linksky.service.*.*(..))" id="logPointCut"/>        <!-- 切面配置 -->        <aop:aspect id="logAspect" ref="log">            <aop:before method="log" pointcut-ref="logPointCut"/>        </aop:aspect>    </aop:config>

5、编写测试类进行测试
通知详解
切面中的方法就叫通知。
通知分为前置通知、后置通知、异常通知、最终通知、环绕通知。
前置通知(Before)
在目标方法之前执行。
配置eg:

<!-- 切面配置 -->        <aop:aspect id="logAspect" ref="log">            <!-- 通知,通知策略 -->            <aop:before method="log" pointcut-ref="logPointCut"/>        </aop:aspect>

后置通知(after-reruning)
在结果成功返回之后执行。后置通知可以获取目标方法的返回值。
配置eg:

<aop:after-returning method="afterLog" pointcut-ref="logPointCut" returning="result"/>

必须注意后面的returning。。。。要写返回值!

异常通知(after-throwing)
在程序抛出异常之后执行
配置eg:

<aop:aspect id="logAspect" ref="log">            <!-- 通知,通知策略 -->            <aop:after-throwing method="exceptionLog" pointcut-ref="logPointCut" throwing="e"/>        </aop:aspect>

最终通知(after)
在方法的最后执行,和前置通知一样,配置简单。
配置eg:

<aop:after method="lastLog" pointcut-ref="logPointCut" />

环绕通知(around)
eg:

<aop:around method="aroundLog" pointcut-ref="logPointCut" />
原创粉丝点击