before()方法也就是在我们代码执行之前运行,afterReturning()在我们执行代码之后运行.Join Point类型的参数,Spring会自动注入该实例,通过getTarget()方法可以得到被代理的目标对象,getSignature()方法返回被代理的目标方法,getArgs()方法返回传递给目标方法的参数数组
在Spring配置文件中对相关组件进行声明
<bean> </bean>
<bean>
<property ref="dao"></property>
</bean>
<bean></bean>
接下来在Spring配置文件中进行AOP相关的配置,首先定义切入点
定义切入点
<?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
">
<bean> </bean>
<bean>
<property ref="dao"></property>
</bean>
<bean></bean>
<aop:config>
<!--定义一个切入点表达式,并命名为“pointcut”-->
<aop:pointcut
expression="execution(public void addNewUser(entity.User))"/>
</aop:config>
</beans>
与AOP相关的配置都放在
public * addNewUser(entity.User):* 表示匹配所有类型的返回值
public void * (entity.User):* 表示匹配所有方法名。
public void addNewUser(..):.. 表示匹配所有参数个数和类型
“ * com.service.* .*(..):匹配com.service包下所有类的所有方法
“ * com.service..* .*(..):匹配com.service包及其子包下所有类的所有方法
大家可以根据自己的需求来设置切入点的匹配规则,当然配置的关键字还有很多,我就不一一介绍了,如果有兴趣可以查看Spring的开发手册
最后还需要在切入点处插入增强处理,这个过程的专业叫法是”织入“
<?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
">
<bean> </bean>
<bean>
<property ref="dao"></property>
</bean>
<bean></bean>
<aop:config>
<!--定义一个切入点表达式,并命名为“pointcut”-->
<aop:pointcut expression="execution(public void addNewUser(entity.User))"/>
<!--引用包含增强方法的Bean-->
<aop:aspect ref="theLogger">
<!--将before()方法定义为前置增强并引用pointcut切入点-->
<aop:before method="before" pointcut-ref="pointcut"></aop:before>
<!--将afterReturning()方法定义为后置增强并引用pointcut切入点-->
<aop:after-returning method="afterReturning" pointcut-ref="pointcut" returning="result"></aop:after-returning>
</aop:aspect>
</aop:config>
</beans>
编写测试
ApplicationContext context=new
ClassPathXmlApplicationContext("applicationContext.xml");
UserService service= (UserService) context.getBean("service");
User user =new User();
service.addNewUser(null);