(本案例还是结合上一篇文章,给UserServiceImpl的方法中横向织入日志信息)
1.自定义的增强类的编写:
public class Diy { public void before(){ System.out.println("方法执行前~~~~~~~~~~~~~~~"); } public void after(){ System.out.println("方法执行后~~~~~~~~~~~~~"); } }
2.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 http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!--1.user bean的注册--> <bean id="user" class="com.xbf.service.UserServiceImpl"/> <!--2. 自定义类 bean 的注册--> <bean id="diy" class="com.xbf.diy.Diy"/> <!--3.aop--> <aop:config> <!--切入面 自定义类--> <aop:aspect ref="diy"> <!--切入点--> <aop:pointcut id="pointcut" expression="execution(* com.xbf.service.UserServiceImpl.*(..))"/> <!--切入面类中的方法--> <aop:before method="before" pointcut-ref="pointcut"/> <aop:after method="after" pointcut-ref="pointcut"/> </aop:aspect> </aop:config> </beans>
3.测试类的编写:(接口接收,和动态代理一样)
public class DiyTest { @Test public void test(){ ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml"); UserService user = (UserService)context.getBean("user"); user.add(); } }
总结:自定义的增强类相当于是切入面,增强类中方法就是要横向织入实现类中(即切入点)的方法。