spring学习——MethodInterceptor接口解析

admin 09-13 系统学习 暂无评论
spring学习——MethodInterceptor接口解析
 
MethodInterceptor接口主要用于spring AOP 动态代理的实现,主要对Java方法的功能加强,一般用在,在方法执行前后做一些固定的强化功能,比如说记录日志、统计方法耗时时间。


spring xml 配置的方式使用


比如说,我们要在所有方法的执行前后,执行相关的操作

1、定义 UserService 接口

 
public interface UserService {
    void login(String userName,String passWord);
    boolean register(String userName,String passWord);
}

2、实现 UserService 接口 ——目标对象
 
public class UserServiceImpl implements UserService{

    @Override
    public void login(String userName, String passWord) {
        System.out.println("执行用户登录的逻辑!");
    }

    @Override
    public boolean register(String userName,String passWord) {
        System.out.println("执行用户注册的逻辑!");
        return true;
    }
}

3、定义一个代理对象 Arround 实现 MethodInterceptor
 
public class Arround implements MethodInterceptor {

    /**
     *  这里主要实现增加功能
     * @param methodInvocation  所要代理的方法
     * @return Object    所要代理的方法返回的
     * @throws Throwable
     */
    @Override
    public Object invoke(MethodInvocation methodInvocation) throws Throwable {
        System.out.println("方法之前执行……");
        Object obj=   methodInvocation.proceed(); //执行目标对象的方法
        System.out.println("方法之后执行……");
        return obj;
    }

}

说明:主要 MethodInterceptor 接口 里面方法的参数说明。

4、在配置文件 applicationContext.xml 添加配置

 
    <!--目标方法-->
    <bean id="userService"  class="com.chunge.aop.UserServiceImpl"></bean>
    <!--增强功能-->
    <bean id="arround" class="com.chunge.aop.Arround"></bean>
    <aop:config>
        <!--切入点 设置成所有方法 添加增强功能-->
        <aop:pointcut id="pc" expression="execution(* *(..))"/>
        <!--  把切入点 和增强功能关联起来     -->
        <aop:advisor advice-ref="arround" pointcut-ref="pc"></aop:advisor>
    </aop:config>

5、单元测试
 
    @Test
    public void test3() {
        ApplicationContext applicationContext= new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
        UserService userService= (UserService) applicationContext.getBean("userService");
        userService.login("荷兰男孩","123456");
    }

6、打印测试结果
 
 

方法前后执行的功能,就是spring给我们提供的通过 MethodInterceptor 接口实现代理对象,增强的功能。


7、总结

      MethodInterceptor 接口 主要是spring给我提供的,使用利用Spring AOP 思想  实现动态代理的一种方式。

转载请注明来自一个开发者的工作笔记——荷兰男孩的博客,本文标题:《spring学习——MethodInterceptor接口解析》

喜欢( ) 发布评论

分享到:

spring学习——BeanPostProcessor接口解析 Java8新特性——lambda表达式怎么用