当前位置: 首页 > news >正文

衡阳网站建设mdawl比较大的做网站的公司

衡阳网站建设mdawl,比较大的做网站的公司,红阳建设集团网站,环球设计网站定义一个注解,用于标注于方法上,标志着此方法是一个事务方法。 Target({ElementType.METHOD,ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) public interface MyTransaction {}定义一个开启事务功能的注解 Component Import(TransActionBean…
  • 定义一个注解,用于标注于方法上,标志着此方法是一个事务方法。
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyTransaction {}
  • 定义一个开启事务功能的注解
@Component
@Import(TransActionBeanPostProcessor.class)
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface EnableTransactionalManagement {
}
  • BeanPostProcessor Bean的后置处理器,拦截每一个创建后的对象,这里拦截的是Bean的方法上标注了MyTransaction 注解的对象,为其创建代理对象。
/**对象事务处理器*/
public class TransActionBeanPostProcessor implements BeanPostProcessor {@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {//判断bean的类或者方法上是否标注了事务注解@MyTransactionMyTransaction annotation = AnnotationUtils.findAnnotation(bean.getClass(), MyTransaction.class);boolean isTxProxy = false;if (annotation == null){//从方法上寻找Method[] methods = bean.getClass().getMethods();for (Method method : methods) {annotation = AnnotationUtils.findAnnotation(method, MyTransaction.class);if (annotation != null){isTxProxy = true;break;}}}if (isTxProxy){//为Bean创建代理对象bean = TransactionProxyUtil.getTxProxyObject(bean, transactionManagement());}return bean;}//给容器中注入事务管理器@Beanpublic PlatformTransactionManagement transactionManagement(){return new PlatformTransactionManagement();}}
  • JdbcTransactionStatus 定义一个事务的状态信息
public class JdbcTransactionStatus implements TransactionStatus{//private DataSource dataSource;private Connection connection;@Overridepublic void start() {//connection.setAutoCommit(false);System.out.println("connection.setAutoCommit(false); 开启事务");}@Overridepublic void commit() {//事务提交//connection.commit();System.out.println("事务提交了...");}@Overridepublic void rollback() {try {//事务回滚//connection.rollback();System.out.println("事务回滚了...");} catch (Exception throwables) {throwables.printStackTrace();}}@Overridepublic void close() {//connection.close();System.out.println("事务连接关闭了...");}
}
  • PlatformTransactionManagement 定义平台事务管理器,这个事务管理器主要管理DataSource数据源,在开启事务之前将Connection和当前线程绑定。
public class PlatformTransactionManagement implements TransactionManagement{@Overridepublic TransactionStatus getTransaction() {return new JdbcTransactionStatus();}@Overridepublic void commit(TransactionStatus status) {status.commit();}@Overridepublic void rollback(TransactionStatus status) {status.rollback();}@Overridepublic void close(TransactionStatus status) {status.close();}}
/**事务管理器*/
public interface TransactionManagement {//获取一个事务TransactionStatus getTransaction();//提交事务void commit(TransactionStatus status);//回滚事务void rollback(TransactionStatus status);//关闭连接void close(TransactionStatus transaction);
}
/**事务状态定义*/
public interface TransactionStatus {void start();//提交void commit();//回滚void rollback();//关闭连接void close();
}
  • 定义事务代理逻辑,创建代理对象,栏目目标方法,反射执行真正的方法,这里使用的是JDK的动态代理实现的。
public class TransactionProxyUtil {public static Object getTxProxyObject(Object source,TransactionManagement transactionManagement){Object proxyInstance = Proxy.newProxyInstance(source.getClass().getClassLoader(), source.getClass().getInterfaces(),new InvocationHandler() {@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {//将方法替换为实现类中的方法,否则获取不到实现类方法上标注的注解String name = method.getName();Class<?>[] parameterTypes = method.getParameterTypes();method = source.getClass().getMethod(name,parameterTypes);Object result = null;if (!method.isAnnotationPresent(MyTransaction.class)){result = method.invoke(source,args);}else {//获取切面类,封装方法//开启事务TransactionStatus transaction = transactionManagement.getTransaction();transaction.start();try {result = method.invoke(source,args);transactionManagement.commit(transaction);}catch (Throwable e){transactionManagement.rollback(transaction);}finally {transactionManagement.close(transaction);}}return result;}});return proxyInstance;}}
http://www.yayakq.cn/news/678598/

相关文章:

  • 摄影作品网站或app做旅游网站有前途吗
  • 硅胶科技东莞网站建设宜昌市住房城乡建设网站
  • 水果网店网站建设策划书汕头网站优化
  • 单网页网站源码三明seo
  • 网站建设平台排名免费代理服务器ip和端口
  • 做网站电脑需要配置很好吗长春火车站到龙嘉机场动车时刻表
  • 阿里网站建设App开发保定做网站的公司
  • 免费建设自己的网站图片制作带字
  • 郑州网站seo诊断字体多的网站
  • 深圳网站建设价格多少海报设计理念
  • 中国农业工程建设协会网站seo是什么职位
  • 网站不收录的原因小企业网站建设在哪能看
  • 西安网站建设麦欧科技网站建设安全级别
  • 做电商网站报价南昌网站建设那家好
  • 网站建设方案数做网站的时候表格怎么去掉
  • 广西住房和城乡建设厅培训中心网seo搜索引擎优化方式
  • 北京网站建设中心wordpress如何安装模板文件
  • 汕头建站方案网站推广人员怎么算业绩
  • 有没有专门学做婴儿衣服的网站长沙php网站建设
  • 常见行业门户网站wordpress多说
  • 郴州品牌网站建设推广安康网站建设
  • 地产平面网站上海营销网站推广多
  • 怎样把网站推广出去怎样申请建立自助网站
  • 做名片用什么网站单页网站优化
  • 制作网站的软件什么好用个人网站开发用什么语言
  • 网站页面分析范文重庆网红景点有哪些
  • 光电工程东莞网站建设优化网站首页
  • 广告公司网站seo专家招聘
  • 冬奥会建设官方网站怎样用网站做淘宝客
  • 知名做网站安卓市场下载app