`

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......");
  }
 }
}

分享到:
评论

相关推荐

    征服Spring AOP—— @AspectJ

    在IT行业中,Spring框架是Java企业级应用开发的首选,而Spring AOP(面向切面编程)则是其核心特性之一,用于实现横切关注...通过学习和实践,你将能更好地掌握这一强大的工具,从而在你的IT职业生涯中征服Spring AOP。

    深入解析Spring AOP源码:从原理到实现,全方位掌握Java AOP编程精髓

    通过学习和理解Spring AOP的源码,开发者可以更好地运用这一技术,定制化地实现自己的切面逻辑,同时优化性能,提高代码质量。对于那些需要更高级功能或对性能有更高要求的项目,可以考虑使用AspectJ进行更深入的AOP...

    Spring AOP之基于AspectJ注解总结与案例

    本篇内容将对Spring AOP中基于AspectJ注解的使用进行总结,并通过实际案例进行解析。 首先,让我们理解AspectJ注解在Spring AOP中的核心概念: 1. **@Aspect**: 这个注解用于定义一个类为切面,这个类将包含切点和...

    Spring2.5使用AOP需要的aspectJ

    AspectJ是一个成熟的AOP框架,Spring在其AOP实现中整合了AspectJ,提供了更强大的面向切面编程能力。本篇文章将详细探讨在Spring 2.5中使用AspectJ进行AOP开发所需的知识点。 首先,我们需要理解AOP的核心概念: 1....

    Spring AOP @AspectJ 入门实例

    本实例将带你深入理解并实践Spring AOP与@AspectJ的结合使用。 首先,了解AOP的基本概念。面向切面编程是一种编程范式,它允许程序员定义“切面”,即跨越多个对象的行为或责任。这些切面可以包含业务逻辑、日志、...

    spring-aop-aspectj-case

    标题“spring-aop-aspectj-case”涉及到的是Spring框架中的AOP(面向切面编程)与AspectJ的集成使用案例。在Spring框架中,AOP用于处理系统中的横切关注点,如日志、事务管理等,而AspectJ则是一个强大的、独立的...

    Spring AOP + AspectJ in XML 配置示例

    这篇博客“Spring AOP + AspectJ in XML配置示例”旨在指导开发者如何在XML配置中实现Spring AOP和AspectJ的结合。 首先,我们需要理解AOP的基本概念。AOP通过将关注点(如日志、事务管理)与业务逻辑分离,提高了...

    Spring AOP的AspectJ支持jar包

    Spring AOP的AspectJ支持jar包; 包括: com.springsource.net.sf.cglib-2.2.0.jar com.srpingsource.org.aopalliance-1.0.0.jar com.srpingsource.org.aspectj.weaver-1.68.RELEASE.jar

    Spring AOP 概念理解及@AspectJ支持

    **Spring AOP 概念理解** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个重要组成部分,它允许我们通过...理解和熟练运用Spring AOP及其@AspectJ注解是每个Spring开发者必备的技能之一。

    Spring Aop四个依赖的Jar包

    这个组件使得Spring AOP能够与未修改的第三方库无缝集成,因为Spring AOP可以利用AspectJ Weaver来处理那些不支持代理的对象。 3. **cglib-nodep-2.1_3.jar**:CGLIB(Code Generation Library)是一个高性能的代码...

    SpringAOP+AspectJ

    **Spring AOP与AspectJ详解** 在现代软件开发中,面向切面编程(Aspect-Oriented Programming,简称AOP)是一种强大的设计模式,它允许我们分离关注点,将横切关注点(如日志、事务管理、权限控制等)与核心业务...

    Spring AOP + AspectJ annotation example

    AspectJ是Spring AOP支持的一种强大的、独立的AOP语言,它提供了注解来简化切面的定义。本篇将深入探讨如何结合Spring AOP和AspectJ注解进行实践。 首先,我们需要理解AOP的基本概念。面向切面编程是一种编程范式,...

    spring-aop-aspectj(Schema)-case

    学习这个案例,你将了解到如何使用XML Schema配置实现Spring AOP,包括创建切面、定义切入点、编写通知,并理解这些元素如何协同工作以实现AOP的功能。这将有助于你更好地理解和利用Spring AOP在实际项目中进行横切...

    spring aop 学习笔记

    本学习笔记将深入探讨Spring AOP的核心概念、工作原理以及实际应用。 1. **核心概念** - **切面(Aspect)**:切面是关注点的模块化,包含业务逻辑之外的横切关注点,如日志、事务管理。 - **连接点(Join Point...

    aspectj的jar spring使用aop需要的jar

    综上所述,为了在Spring中利用AspectJ的全部功能,你需要将对应的AspectJ JAR文件加入到项目类路径中,然后按照Spring文档或AspectJ文档的指导配置和使用AOP。这将使你的代码更加模块化,降低耦合,提高可维护性。

    @AspectJ配置Spring AOP,demo

    `springAOP2`可能是一个包含具体示例代码的目录。`基于@AspectJ配置Spring AOP之一 - 飞扬部落编程仓库-专注编程,网站,专业技术.htm`和其关联的`_files`目录可能包含了一个详细的教程或演示如何配置和运行@AspectJ的...

    springAOP所需jar包

    5. aspectjrt.jar:AspectJ运行时库,Spring AOP可以与AspectJ集成,提供更强大的AOP功能。 6. aspectjweaver.jar:AspectJ编译器和织入器,用于在编译或运行时将切面织入目标类。 7. cglib-nodep.jar:CGLIB字节码...

    spring AspectJ aop学习

    当我们谈论"spring AspectJ aop学习"时,我们将深入探讨Spring AOP如何结合AspectJ来实现更灵活的模块化和解耦。 首先,让我们理解AOP的概念。面向切面编程(Aspect Oriented Programming)是一种编程范式,旨在将...

    简单spring aop 例子

    Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和声明式的方式来处理系统中的交叉关注点问题,如日志、事务管理、安全性等。本示例将简要介绍如何在Spring应用中实现AOP,通过实际的...

    SpringAop学习笔记以及实现Demo

    - 在Spring配置中启用注解驱动的AOP,`&lt;aop:aspectj-autoproxy&gt;`。 3. **基于XML配置的AOP**: - 定义切面类,无需特殊注解。 - 在XML配置文件中定义`&lt;aop:config&gt;`,并创建`&lt;aop:pointcut&gt;`定义切入点。 - ...

Global site tag (gtag.js) - Google Analytics