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

wordpress 弹幕插件windows系统优化软件排行榜

wordpress 弹幕插件,windows系统优化软件排行榜,网站开发方案及报价,wordpress恢复密码Transactional注解 Spring使用了TransactionInterceptor拦截器,该拦截器主要负责事务的管理,包括开启、提交、回滚等操作。当在方法上添加Transactional注解时,Spring会在AOP框架中对该方法进行拦截,TransactionInterceptor会在该…

@Transactional注解

Spring使用了TransactionInterceptor拦截器,该拦截器主要负责事务的管理,包括开启、提交、回滚等操作。当在方法上添加@Transactional注解时,Spring会在AOP框架中对该方法进行拦截,TransactionInterceptor会在该方法执行前后,对事务进行切面处理,Spring会基于该类生成一个代理对象,把这个代理对象作为bean。当调用这个代理对象的方法时,如果有事务处理,则会先关闭事务的自动功能,然后执行方法的具体业务逻辑,如果业务逻辑没有异常,那么代理逻辑就会直接提交,如果出现任何异常,那么直接进行回滚操作。

事务管理器

Spring还提供了多种事务管理器,包括JDBC事务管理器、Hibernate事务管理器、JTA事务管理器等等,可以满足不同数据访问层的需求。事务通知是Spring事务机制中的一个重要组成部分,主要用于判断哪些方法需要被事务管理,以及如何管理事务。

Spring事务底层实现原理

应用启动时会创建一个代理类,把事务逻辑织入到代理类中,然后用代理类替代目标类,并放入上下文容器中。当实际调用目标类的事务方法时,被代理类拦截,先执行拦截器中的事务逻辑,再执行目标类的业务逻辑,最后处理异常回滚和提交。这样就能实现简单、方便、可控的事务管理。

示例代码

这里给出一个简单的示例代码:

定义一个接口,包含需要进行事务管理的方法:

public interface UserService {void addUser(User user);void deleteUser(String id);void updateUser(User user);User getUser(String id);
}

实现这个接口的目标类:

public class UserServiceImpl implements UserService {@Overridepublic void addUser(User user) {//添加用户的业务逻辑}@Overridepublic void deleteUser(String id) {//删除用户的业务逻辑}@Overridepublic void updateUser(User user) {//更新用户的业务逻辑}@Overridepublic User getUser(String id) {//查询用户的业务逻辑return null;}
}

定义一个事务拦截器类:

/*** TransactionInterceptor 是一个实现了 MethodInterceptor 接口的拦截器类*/
public class TransactionInterceptor implements MethodInterceptor {/*** TransactionManager 对象,用于管理事务*/private TransactionManager txManager;/*** 用于注入 TransactionManager 对象* @param txManager TransactionManager 对象*/public void setTxManager(TransactionManager txManager) {this.txManager = txManager;}/*** 实现 MethodInterceptor 接口的 invoke 方法,用于拦截指定方法* @param invocation MethodInvocation 对象,用于获取被拦截的方法及其参数* @return 执行方法的返回结果* @throws Throwable 抛出异常*/@Overridepublic Object invoke(MethodInvocation invocation) throws Throwable {Object result;try {// 开启事务txManager.start();// 执行被拦截的方法,并获取方法执行的返回结果result = invocation.proceed();  // 提交事务txManager.commit();} catch (Exception e) {// 回滚事务txManager.rollback();throw e;}return result;}
}

定义一个上下文容器类:

public class ApplicationContext {private Map<String, Object> beanMap = new HashMap<>(); // 用于存放bean的map// 注册beanpublic void registerBean(String name, Object bean) {beanMap.put(name, bean); // 将bean存放到map中}// 获取beanpublic Object getBean(String name) {Object bean = beanMap.get(name); // 从map中获取beanif (bean instanceof Advised) { // 如果bean是Advised类型,说明使用了AOPreturn ((Advised)bean).getTargetSource().getTarget(); // 返回目标对象}return bean; // 返回原始对象}
}

在应用启动时,创建一个代理工厂类,使用上述事务拦截器对目标类进行代理:

/*** 代理工厂类,用于创建代理对象*/
public class ProxyFactory {/*** 创建代理对象* @param target 目标对象,需要被代理的对象* @param interceptor 事务拦截器,代理对象需要加入该拦截器* @return 返回代理对象*/public static Object createProxy(Object target, TransactionInterceptor interceptor) {DefaultAopProxyFactory proxyFactory = new DefaultAopProxyFactory();AdvisedSupport advisedSupport = new AdvisedSupport();advisedSupport.setTarget(target); // 设置目标对象advisedSupport.addAdvice(interceptor); // 添加事务拦截器return proxyFactory.createAopProxy(advisedSupport).getProxy(); // 创建代理对象并返回}
}

然后在应用启动时,创建容器并注册代理类:

public class Main {public static void main(String[] args) {ApplicationContext context = new ApplicationContext();UserService target = new UserServiceImpl(); //创建目标类TransactionInterceptor interceptor = new TransactionInterceptor();interceptor.setTxManager(new TransactionManager()); //设置事务管理器UserService proxy = (UserService) ProxyFactory.createProxy(target, interceptor); //创建代理类context.registerBean("userService", proxy); //注册代理类到上下文容器中//使用代理类进行业务操作User user = new User();context.getBean("userService").addUser(user);}
}

这样,当执行代理类的方法时,就会先执行事务拦截器中的事务逻辑,再执行目标类的业务逻辑。如果出现异常,会进行回滚。这样就实现了简单、方便、可控的事务管理。

http://www.ritt.cn/news/17973.html

相关文章:

  • 内江做网站的公司关键词挖掘排名
  • 怎么用自己电脑做服务器发布网站吗整站优化报价
  • 网站设计专业就业方向有哪些关键词怎么找出来
  • 基于工作过程的商务网站建设 网页制作营销方案ppt
  • 设计品牌网站个人网站怎么做
  • 大连网页模板建站全球外贸b2b网站
  • 组建做网站的团队seo网站推广费用
  • 做视频网站该把视频文件传到哪东莞网站seo推广
  • 家居网站建设策划标题关键词优化报价
  • 营销策略分析青岛seo排名公司
  • 专门做彩平的网站交换链接的作用
  • 如何开自己的网站中国500强最新排名
  • 做直播网站需要学什么软件有哪些爱链接网如何使用
  • 做淘宝联盟网站要多少钱?搜索引擎排名中国
  • wordpress問答系統北京首页关键词优化
  • 如何用网站做淘客怎样建立网站平台
  • 关于花卉的网站怎么做网址导航浏览器下载
  • 网站开发php支付接口360站长工具seo
  • poco摄影网seo外链工具
  • 甘肃做网站找谁搜索引擎入口google
  • 网站路径301重定向怎么做报个计算机培训班多少钱
  • 福建建设厅官方网站百度广告代理商
  • 好看的网页设计模板南宁seo外包平台
  • 郴州 网站建设市场宣传推广方案
  • 做一个页面网站需要多少钱关键词分类工具
  • 模仿网站建设站建设新闻最近的大事10件
  • 献县做网站英文外链代发
  • 财务公司是做什么的如何进行关键词优化工作
  • 网站开发费用属于哪种无形资产如何制作自己的网站?
  • 人才招聘网站怎么做网站统计分析平台