<!--配置IOC-->
<!--配置Spring的ioc,把service对象配置进来,需要增强的类-->
<bean id="AccountService" class="cn.lz.Service.impl.AccountServiceImpl"></bean>
<!--Spring中基于xml的AOP配置步骤
1.把通知bean也交给Spring来管理
2.使用aop:config标签表明开始AOP的配置
3.使用aop:aspect标签标示配置切面
id属性:是给切面提供一个唯一表示
ref属性:是指定通知类bean的ID
4.在aop:aspect标签的内部使用对应标签来配置通知的类型
我们现在示例是让printLog方法在切入点方法执行之前执行。所以是前置通知
aop:before 标示是前置通知
method属性:用于指定Logger类那个方法是前置通知
pointcut属性:用于指定切入点表达式,该表达式的含义指的是对业务层中
哪些方法增强
切入点表达式的写法:
关键字:execution(表达式)
表达式:
访问修饰符 返回值 包名.包名.包名....类名.方法名(参数列表)
例子:
public void cn.lz.Service.impl.AccountServiceImpl.addAccount()
访问修饰符可以省略:
void cn.lz.Service.impl.AccountServiceImpl.addAccount()
返回值可以使用通配符,表示任意返回值:
* cn.lz.Service.impl.AccountServiceImpl.addAccount()
包名可以使用通配符,表示任意包。但是有几级包,就需要写几个*。
* *.*.*.*.AccountServiceImpl.addAccount()
包名还可以使用 ..表示当前包及子包
* *..AccountServiceImpl.addAccount()
意思:任意包下有AccountServiceImpl.addAccount()就会被增强
类名和方法名都可以使用*来实现统配 * *..*.*()
参数列表:
可以直接写数据类型:
基本类型直接写名称 int
引用类型写包名.类名 java.lang.String
可以使用通配符表示任意类型 但是必须有参数
可以使用..表示有无参数均可,有参数可以任意类型 * *..*.*(..)
全通配写法
* *..*.*(..)
实际开发中切入点表达式的通常写法
切到业务层实现类下的所用方法
* cn.lz.Service.impl.*.*(..)
要导入aspectj这个jar包
-->
<!--配置logger类-->
<bean id="logger" class="cn.lz.utils.Logger"></bean>
<!--配置AOP-->
<aop:config>
<!--配置切面-->
<aop:aspect id="logAdvice" ref="logger">
<!--配置的通知类型,并且建立通知方法和切入点方法的关联-->
<aop:before method="prinLog" pointcut="execution(public
voidcn.lz.Service.impl.AccountServiceImpl.addAccount())"></aop:before>
</aop:aspect>
</aop:config>
</beans>
Spring中AOP的配置和切入点表达式
最新推荐文章于 2024-06-27 22:48:52 发布