spring之事务管理---注解pian
2018-03-21 12:07
113 查看
(一)AOP术语:
连接点(JoinPoint)--- 使用:获取到切点的信息,包括传入参数切点(poincut)---- 需要开启事务管理的方法
切面(Aspect)---- 切点和通知定义了切面的全部内容
(1)前置通知(Before):在目标方法被调用前通知
(2)后置通知(After):目标方法完成之后调用,不会关心方法的输出是什么
(3)返回通知(After-returning):目标成功执行之后调用通知
(4)异常通知(After-throwing):目标方法出现异常时候通知
(5)环绕通知(Around):把目标方法包裹起来,在方法执行前和调用之后执行自定义的行为 引入(Introduction)--允许我们向现有类添加新方法或属性
织入(Weaving)--把切面应用到目标对象并创建新的代理的过程
(二)spring借鉴了AspectJ的切面,以提供注解驱动的AOP。且spring只支持方法级别的连接点
AOP支持的AspectJ切入点指示符如下: execution:用于匹配方法执行的连接点; within:用于匹配指定类型的方法执行; this:用于匹配当前AOP代理对象类型的执行方法;注意是AOP代理对象的类型匹配,这样就可能包括引入接口也类型匹配; target:用于匹配当前目标对象类型的执行方法;注意是目标对象的类型匹配,这样就不包括引入接口也类型匹配; args:用于匹配当前执行的方法传入的参数为指定类型的执行方法; @within:用于匹配所以持有指定注解类型内的方法; @target:用于匹配当前目标对象类型的执行方法,其中目标对象持有指定的注解; @args:用于匹配当前执行的方法传入的参数持有指定注解的执行; @annotation:用于匹配当前执行方法持有指定注解的方法;(三)组合切入点表达式
AspectJ使用 且(&&)、或(||)、非(!)来组合切入点表达式。 Spring ASP 提供了and、or、not来代替&&、||、!。实例 execution([返回类型] [所属类].[方法名]([参数])) * 代表返回任意类型 .. 代表任意参数 execution(* concert.Text.pweform(..))
execution(* concert.Text.pweform(..))&&within(concert.*) 仅concert包下的任意类被调用时
public class Test {
@Pointcut("execution(* com.oranth.service.dao.InterfaceUserService.qusry_user())")
public void preformance(){}
/**
* 环绕通知
* @param jp
*/
@Around("preformance()")
public void visits(ProceedingJoinPoint jp){
try {
System.out.println("开始之前");
jp.proceed();
System.out.println("结束以后");
} catch (Throwable e) {
e.printStackTrace();
}
}
//JoinPoint
@Before("execution(* com.oranth.service.dao.InterfaceUserService.qusry_user())")
public void visits(){
System.out.println("开始之前");
}
/**
* 获取传入参数
* @param jp
*/
@Before("execution(* com.oranth.service.dao.InterfaceUserService.login_user(..))")
public void visits(JoinPoint jp){
System.out.println("jp.getArgs()"+jp.getArgs()[0]+jp.getArgs()[1]);
jp.getArgs()[0] = "王五";
System.out.println("getTarget()"+jp.getTarget());
System.out.println("getThis()"+jp.getThis());
}
}----------
package com.oranth.service.dao;
import java.util.List;
import org.springframework.stereotype.Component;
import com.oranth.pojo.User;
@Component
public interface InterfaceUserService {
public void addUser(User user);
public boolean login_user(String uname,String password);
public List<User> qusry_user();
}
------------------
package com.oranth.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.oranth.dao.UserDao;
import com.oranth.pojo.User;
import com.oranth.service.dao.InterfaceUserService;
@Service
public class UserService implements InterfaceUserService{
@Autowired
UserDao userDao;
@Override
public void addUser(User user) {
userDao.insert_User(user);
}
@Override
public boolean login_user(String uname, String PASSWORD) {
System.out.println(uname);
boolean uid = userDao.user_query(uname, PASSWORD);
System.out.println(PASSWORD);
return uid;
}
@Override
public List<User> qusry_user() {
return userDao.user_queryall();
}
}
-----------
测试执行结果
@Autowired
InterfaceUserService UserService;
@Autowired
User user;
@Test
public void Test1(){
// user.setUid(1);
// user.setUname("李四");
// user.setPASSWORD("123456");
// UserService.addUser(user);
UserService.login_user("李四", "123456");
List<User>list = new ArrayList<User>();
list = UserService.qusry_user();
for(User user: list){
System.out.println(user.toString());
}
}
-------------------
相关文章推荐
- Spring 使用注解方式进行事务管理
- JDK动态代理和CGLIB动态代理,实现Spring注解管理事务区别。
- Spring使用注解事务管理
- Spring配置事务管理,service端通过@Transactional注解
- 【spring】之事物配置,声明式事务管理和基于@Transactional注解的使用
- spring aop 注解 事务管理 以及各种参数分析
- spring事物配置,声明式事务管理和基于@Transactional注解的使用
- Spring 使用注解方式进行事务管理
- spring事物配置,声明式事务管理和基于@Transactional注解的使用(1)
- Spring2.5.x以后使用注解方式的事务管理配置
- Spring 4.16 声明式事务管理方式--注解
- Spring 使用注解方式进行事务管理
- 使用Spring注解方式管理事务与传播行为详解
- Spring 使用注解方式进行事务管理
- Spring注解配置事务管理——问题
- spring事物配置,声明式事务管理和基于@Transactional注解的使用
- Spring 使用注解方式进行事务管理
- spring事物配置,声明式事务管理和基于@Transactional注解的使用
- spring事物配置,声明式事务管理和基于@Transactional注解的使用
- 基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)到底有什么区别。