已添加用户之前需校验用户信息为例,实例前准备,在spring项目中需加入:
lib\aspectj文件下的aspectjrt.jar,aspectjweaver.jar
lib\cglib文件下的cglib-nodep-2.1_3.jar
这三个包是需要加入的。以下为通过xml形式实现aop的技术简单实例
1.添加用户的接口
package com.lanhuigu.spring.impl; public interface IUser { public void add(); }
2.添加用户的实现类
package com.lanhuigu.spring.impl; public class UserImpl implements IUser{ @Override public void add() { // TODO Auto-generated method stub System.out.println("添加用户"); } }
3,切面类
package com.lanhuigu.spring.impl; public class Check { public void checkVal(){ System.out.println("添加用户之前要进行校验......"); } }
4.spring的AOP配置
<?xml version="1.0" encoding="UTF-8"?> <!-- - Application context definition for JPetStore's business layer. - Contains bean references to the transaction manager and to the DAOs in - dataAccessContext-local/jta.xml (see web.xml's "contextConfigLocation"). --> <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" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <!-- XML形式实现AOP --> <!-- 配置服务对象 --> <bean id="u" class="com.lanhuigu.spring.impl.UserImpl"/> <!-- 配置切面类 --> <bean id="check" class="com.lanhuigu.spring.impl.Check"/> <!-- aop的xml配置 --> <aop:config> <!-- 寻找配置切入位置 --> <aop:pointcut id="MyAopPointcut" expression="execution(public * com.lanhuigu.spring.impl.UserImpl.add())" /> <!-- 配置aop的切面类 --> <aop:aspect ref="check"> <!-- 通知类型 --> <aop:before pointcut-ref="MyAopPointcut" method="checkVal"/> </aop:aspect> </aop:config> </beans>
5.测试程序
package com.lanhuigu.spring.test; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.lanhuigu.spring.impl.IUser; public class TestXML { @Test public void testXml(){ ApplicationContext actx = new ClassPathXmlApplicationContext("/applicationContext.xml"); IUser user = (IUser) actx.getBean("u"); user.add(); } }运行结果:
添加用户之前要进行校验......
添加用户
总结:
(1)关于spring配置aop部分的解析
准备条件:id="check"切面类(Advice)
在<aop:config>配置中,通过aop:pointcut的expression来指定在哪个类中的哪个位置为切入位置,通过id="MyAopPointcut"去需找切面类,
而通过aop:aspect ref="check"配置切面类,<aop:before pointcut-ref="MyAopPointcut" method="checkVal"/>指定通知类型,在MyAopPointcut
配置的切入位置之前需要执行切面类的checkVal()方法。
(2)不要忘记导入开头说明的jar包,靠jar根据配置解析通知类型,切入位置等等。