Spring框架实现事务功能

需求

	用自定义注解,在spring框架中实现事务功能 
	1.定义一个新的事务注解
	2.自己定义一个事务管理器(你需要用到,直接来我这里拿就完了)
	3.我这个开发的事务要用在哪,以及加在那个方法上
	4.真正的应用这个自己开发的注解
	5.利用切面,插入事务这个新的功能
	 1) 环绕通知:开启事务,然后要是没有问题,提交事务
	      a.获取目标类上的方法
	      b.判断这个方法上有没有事务
	        //如果有事务,调用事务管理器的开启事务和提交
	        //如果没有,直接调用目标方法
	 2)异常通知:有问题的负责回滚事务
	        //有异常,就回滚事务

代码书写

项目准备工作
在这里插入图片描述

Ts.java

package com.biem.anno;

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

//注解
//@Target(ElementType.METHOD)-->方法

@Target(ElementType.METHOD)

//@Retention(RetentionPolicy.RUNTIME)-->
//给JVM看的,在程序运行的过程中做相关的操作。编译器编译后保留,类加载其加载之后保留,
//在JVM运行时通过反射技术反射使用的是什么注解,注解属性值是什么,根据他们两个值做i对应的操作,

@Retention(RetentionPolicy.RUNTIME)


//1.@interface自定义注解
//<1>@interface自定义注解自动继承了java.lang.annotation.Annotation接口,由编译程序自动完成其他细节。
//<2>在定义注解时,不能继承其他的注解或接口。
//<3>使用@interface来声明一个注解

//作用在方法上注解
public @interface Ts {

}

TsManaget.java

package com.biem.utils;

public class tsManager {

	public static void startTX() {
		System.out.println("开启事务");
	}
	
	
	public static void commitedTX() {
		System.out.println("提交事务");
	}
	
	public static void rollbackTX() {
		System.out.println("回滚事务");
	}
}

TsAspect.java

package com.biem.aspect;

import java.lang.reflect.Method;


import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.reflect.MethodSignature;

import com.biem.anno.Ts;
import com.biem.utils.tsManager;

//切面
public class TsAspect {

	@Around("execution (* com.biem.service.*.*(..))")
	public void around(ProceedingJoinPoint jp) throws Throwable{
	
		MethodSignature signature = (MethodSignature) jp.getSignature();
		
		
		Method method = signature.getMethod();
		
		Class<?> clz = jp.getTarget().getClass();
		 
		 //判断类上是否有TypeAnnotation注解
		Method realmethod = clz.getMethod(method.getName(), method.getParameterTypes());
		
		if (realmethod.isAnnotationPresent(Ts.class)) {
			tsManager.startTX();
			jp.proceed();
			tsManager.commitedTX();
		}else {
			jp.proceed();
		}
	}
}

UserService.java

package com.biem.service;

//增删改查
public interface UserService {
	public String addUser(String name);
	public void updateUser();
	public void deleteUser();
	public void query();
}

UserServiceImpl.java

package com.biem.service;

import org.springframework.stereotype.Service;

@Service("userService")
public class UserServiceImpl implements UserService {


	@Override
	public String addUser(String name) {
		System.out.println("添加用户。。");
		return null;
	}

	@Override
	public void updateUser() {
		System.out.println("更新用户。。");
	}

	@Override
	public void deleteUser() {
		System.out.println("删除用户。。");
	}

	@Override
	public void query() {
		System.out.println("查询用户。。");
	}

}

Tstest.java

package com.biem.test;



import org.junit.Test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;


import com.biem.service.UserService;

public class TStest {
	
	@Test
	public void test01() {
	//获取 路径
		ApplicationContext context = 
			new ClassPathXmlApplicationContext("applicationContext.xml");
	
	//使用 getbean方法从容器中获取对象
		UserService userService = (UserService) context.getBean("userService");
	
	//定义接受类型并接受其方法	
		String result = userService.addUser("尤子介");
		userService.updateUser();
		userService.deleteUser();
		userService.query();
		System.out.println(result);
	}
}

运行结果


添加用户。。
更新用户。。
删除用户。。
查询用户。。
null

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值