您的位置:首页 > 编程语言 > Java开发

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());
}

}
-------------------



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息