一、
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;
/**
* 新聞?lì)悇e信息
* @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對(duì)象=======");
return true;
}
public NewsType get(Integer id) {
System.out.println("=======獲取一個(gè)NewsType對(duì)象=======");
return new NewsType();
}
public List<NewsType> get() {
System.out.println("======獲取一個(gè)NewsType對(duì)象列表======");
return null;
}
public boolean save(NewsType t) {
System.out.println("======保存NewsType對(duì)象======");
return true;
}
public boolean update(NewsType t) {
System.out.println("======更新NewsType對(duì)象======");
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");
//定義操作時(shí)間切入點(diǎn)
pointcut operatorTime(): execution(* *.*());
//定義保存切入點(diǎn)
pointcut saveNewsType(NewsTypeDaoImpl dao): target(dao)&&execution(boolean NewsTypeDaoImpl.save(NewsType));
//定義刪除切入點(diǎn)
pointcut deleteNewsType(NewsTypeDaoImpl dao): target(dao)&&execution(boolean NewsTypeDaoImpl.delete(NewsType));
//輸出操作開始時(shí)間
before(): operatorTime(){
System.out.println("用戶操作開始時(shí)間:"+df.format(new Date()));
}
//保存時(shí),判斷用戶是否擁有保存權(quán)限
boolean around(NewsTypeDaoImpl dao): saveNewsType(dao){
NewsType type = (NewsType)thisJoinPoint.getArgs()[0];
if(type.getOperator().getPopedom() > 0){
System.out.println("====開始保存NewsType對(duì)象====");
System.out.println("保存時(shí)間:"+df.format(new Date()));
return proceed(dao);
}else{
System.out.println("你暫時(shí)還沒有保存NewsType對(duì)象的權(quán)利");
System.out.println("你的權(quán)限為:"+type.getOperator().getPopedom());
return false;
}
}
//刪除時(shí),要提示用戶是否真的要?jiǎng)h除此對(duì)象
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對(duì)象成功=======");
}else{
System.out.println("=======刪除NewsType對(duì)象失敗=======");
}
}else{
System.out.println("數(shù)據(jù)未被刪除......");
}
}else{
System.out.println("你沒有刪除NewsType對(duì)象的權(quán)限......");
}
}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......");
}
}
}