Spring AOP學習:AspectJ

一、
package com.spring.aop.test.aspectj.test_2;

import java.util.Date;

/**
 * 管理員
 * @author Administrator
 *
 */
public class Operator {

 private Integer id ;
 private String name ;
 private String password ;
 private Integer popedom ;
 private Date loginTime ;
 ..set()/get().... 
}

二、

package com.spring.aop.test.aspectj.test_2;

import java.util.Date;

/**
 * 新聞類別信息
 * @author Administrator
 *
 */
public class NewsType {

 private Integer id ;
 private String typeName ;
 private String desc ;
 private Operator operator ;
 private Date addTime ;
 
 public NewsType(){}
 ...set()/get()...
}

三、

package com.spring.aop.test.aspectj.test_2;

import java.util.List;

public interface BasicDao<T> {

 boolean save(T t) ;
 boolean delete(T t) ;
 boolean update(T t) ;
 T get(Integer id) ;
 List<T> get() ; 
}

四、

package com.spring.aop.test.aspectj.test_2;

import java.util.List;

public class NewsTypeDaoImpl implements BasicDao<NewsType> {

 public boolean delete(NewsType t) {
  
  System.out.println("=======刪除NewsType對象=======");
  return true;
 }

 public NewsType get(Integer id) {

  System.out.println("=======獲取一個NewsType對象=======");
  return new NewsType();
 }

 public List<NewsType> get() {
  
  System.out.println("======獲取一個NewsType對象列表======");
  return null;
 }

 public boolean save(NewsType t) {
  
  System.out.println("======保存NewsType對象======");
  return true;
 }

 public boolean update(NewsType t) {
  
  System.out.println("======更新NewsType對象======");
  return true;
 }

}


五、

package com.spring.aop.test.aspectj.test_2;

import java.io.*;
import java.util.Date;


public aspect NewsTypeAspect {

 private static java.text.SimpleDateFormat df=new java.text.SimpleDateFormat("yyyy-MM-dd H:m:s");
 
 //定義操作時間切入點
 pointcut operatorTime(): execution(* *.*());
 //定義保存切入點
 pointcut saveNewsType(NewsTypeDaoImpl dao): target(dao)&&execution(boolean NewsTypeDaoImpl.save(NewsType));
 //定義刪除切入點
 pointcut deleteNewsType(NewsTypeDaoImpl dao): target(dao)&&execution(boolean NewsTypeDaoImpl.delete(NewsType));
 
 //輸出操作開始時間
 before(): operatorTime(){
  
  System.out.println("用戶操作開始時間:"+df.format(new Date()));
 }
 //保存時,判斷用戶是否擁有保存權限
 boolean around(NewsTypeDaoImpl dao): saveNewsType(dao){

  NewsType type = (NewsType)thisJoinPoint.getArgs()[0];
  if(type.getOperator().getPopedom() > 0){
   
   System.out.println("====開始保存NewsType對象====");
   System.out.println("保存時間:"+df.format(new Date()));
   return proceed(dao);
  }else{
   
   System.out.println("你暫時還沒有保存NewsType對象的權利");
   System.out.println("你的權限爲:"+type.getOperator().getPopedom());
   return false;
  }
 }
 
 //刪除時,要提示用戶是否真的要刪除此對象
 boolean around(NewsTypeDaoImpl dao): deleteNewsType(dao){
  
  boolean flag = false;
  try{
   
   NewsType type = (NewsType)thisJoinPoint.getArgs()[0];
   
   if(type.getOperator().getPopedom() > 0){
    
    BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
    System.out.println("開始刪除操作......");
    System.out.println("Enter a operator<Y/N>:");
    String info = stdin.readLine();
    
    if(info.indexOf("Y") != -1){
     
     System.out.println("可以刪除......");
     flag = proceed(dao);
     if(flag){
      
      System.out.println("=======刪除Newstype對象成功=======");
     }else{
      
      System.out.println("=======刪除NewsType對象失敗=======");
     }
    }else{
     
     System.out.println("數據未被刪除......");
    }
   }else{
    
    System.out.println("你沒有刪除NewsType對象的權限......");
   }
  }catch(Exception e){
   
   System.out.println(e.getMessage());
  }
  return flag;
 }
 
}

六、

package com.spring.aop.test.aspectj.test_2;

public class NewsTypeDaoTest {

 public static void main(String[] arg){
  
  Operator op = new Operator();
  op.setId(1);
  op.setName("admin");
  op.setPassword("password");
  op.setPopedom(1);
  
  NewsType type = new NewsType();
  type.setId(1);
  type.setOperator(op);
  type.setTypeName("新聞");
  
  NewsTypeDaoImpl dao = new NewsTypeDaoImpl();
//  if(dao.save(type)){
//   
//   System.out.println("save ok......");
//  }else{
//   
//   System.out.println("save failed......");
//  }
  
  if(dao.delete(type)){
   
   System.out.println("delete NewsType succ......");
  }else{
   
   System.out.println("delete NewsType failed......");
  }
 }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章