Spring基于接口的动态代理和统一事务处理

Spring基于接口的动态代理和统一事务处理Spring基于接口的动态代理和统一事务处理

大家好,又见面了,我是你们的朋友全栈君。

接口的动态代理

  • 事务
    两种结果:提交 回滚
    提交:发生在return
    回滚:全回滚 / 回滚到定义的保存点
    在这里插入图片描述接口:
public class UserServiceImpl implements UserService { 
   
    public void addUser() { 
   
        System.out.println("addUser");
    }
}

测试类:

 @Test
    public void t3(){ 
   
        final UserServiceImpl userService=new UserServiceImpl();
        /* * ClassLoader loader, 一般调用当前类的类加载器 * Class<?>[] interfaces, * InvocationHandler h * */
        InvocationHandler handler= new InvocationHandler() { 
   
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { 
   
                System.out.println("开启事务");
                Object object=  method.invoke(userService,args);
                System.out.println("关闭事务");
                return object;
            }

        };
        UserService userServiceProxy= (UserService) Proxy.newProxyInstance(Test01.class.getClassLoader(),
                UserServiceImpl.class.getInterfaces(),handler );
        userServiceProxy.addUser();

    }

统一事务处理

统一事务处理类:

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/* * 重写了 BeanPostProcessor * 配置的方法非常简单,只要配置给容器就可以了 * */
public class MyBeanPostProcess implements BeanPostProcessor{ 
   
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { 
   
        System.out.println("Before-Initialization");
        System.out.println(bean);
        System.out.println(beanName);
        return bean;
    }
    public Object postProcessAfterInitialization(final Object bean, String beanName) throws BeansException { 
   
        System.out.println("After-Initialization");
        if(beanName.equals("userService" )){ 
   
            InvocationHandler handler= new InvocationHandler() { 
   
                public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { 
   
                    System.out.println("开启事务");
                    Object object=  method.invoke(bean,args);
                    System.out.println("关闭事务");
                    return object;
                }
            };
            // BeanPostProcessor全局生效 需要使用名称进行过滤
            return Proxy.newProxyInstance(MyBeanPostProcess.class.getClassLoader(),
                    bean.getClass().getInterfaces(),handler);
        }else { 
   
            return bean;
        }
    }
}

applicationContext.xml配置;

<bean class="com.xbj.dao.impl.UserServiceImpl" id="userService" />
<bean class="com.xbj.dao.MyBeanPostProcess" />
 <!--配置BeanPostProcess 全局生效-->

userService:

public interface UserService { 
   
    void addUser();
}

UserServiceImpl:

public class UserServiceImpl implements UserService { 
   
    public void addUser() { 
   
        System.out.println("addUser");
    }
}

测试类:

    private ClassPathXmlApplicationContext context;
    @Before
    public void t1(){ 
   
        context= new ClassPathXmlApplicationContext("applicationContext.xml");
    }
    @Test
    public void t2(){ 
   
        UserService userService=context.getBean("userService",UserService.class);
        userService.addUser();
        context.close();
    }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/106641.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java 文件转inputstream_把文本转换成表格

    java 文件转inputstream_把文本转换成表格以下是一些将InputStream转换为FileJava示例手动将InputStream复制到FileOutputStreamApacheCommonsIO–FileUtils.copyInputStreamToFileJava1.7NIOFiles.copy1.FileOutputStream1.1我们必须将数据从InputStream手动复…

    2022年9月21日
    1
  • jquery的ajax跨域解决方案「建议收藏」

    jquery的ajax跨域解决方案「建议收藏」ajax是一种无刷新技术,在web开发中占有举足轻重的作用,但是由于安全问题,ajax在跨域时候并不支持post。现在笔者写个采用getJSON的方式实现跨域的实例来供大家参考。

    2022年8月24日
    3
  • crm工作机会实体

    crm工作机会实体

    2022年1月17日
    47
  • 机器学习——下采样(under-sampling)「建议收藏」

    下采样(under-sampling)什么是下采样?当原始数据的分类极不均衡时,如下图我们要想用这样的数据去建模显然是存在问题的。尤其是在我们更关心少数类的问题的时候数据分类不均衡会更加的突出,例如,信用卡诈骗、病例分析等。在这样的数据分布的情况下,运用机器学习算法的预测模型可能会无法做出准确的预测,最后的模型显然是趋向于预测多数集的,少数集可能会被当做噪点或被忽视,相比多数集,少数集被…

    2022年4月4日
    147
  • PAT乙级题解

    PAT乙级题解题号C/C++B1001

    2022年5月11日
    40
  • 常用的信息搜集和整理方法_公司合并整合工作方案

    常用的信息搜集和整理方法_公司合并整合工作方案——本文参考自t7前辈的课程,侵删信息收集一、简介什么是信息搜集?信息搜集也称踩点,信息搜集毋庸置疑就是尽可能的搜集目标的信息,包括端口信息、DNS信息、员工邮箱等等看似并不起眼的一些信息都算是信息搜集,这些看似微乎其微的信息,对于渗透测试而言就关乎到成功与否了。信息搜集的重要性信息搜集是渗透测试的最重要…

    2022年4月19日
    106

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号