1.xml文件

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd ">

<!--设置自动代理-->

<aop:aspectj-autoproxy />

<!-- 自动装箱扫描,检测注释的组件-->

<context:component-scan base-package="com.donghua.aop.annotation"></context:component-scan>

<!-- Aspect ,设置切面-->

<bean id="logAd" class="com.donghua.aop.annotation.LogAd" />

</beans>

2  定义切面

@Aspect
public class LogAd{

//expression格式 (修饰符类型?(问好代表可省略如:public)

          返回值类型

          全限定包名?

          方法名(..) ..代表参数类型


@Before("execution(* *(..))")
public void before(){
System.out.println("before==========>");
}

@After("execution(public * *.save(..))")
public void after(){
System.out.println("afte==========>");
}

@AfterReturning("execution(* *(..))")
public void afterreturn(){
System.out.println("afterreturn==========>");
}

@Around("execution(* *.remove*(..))")
public void around(ProceedingJoinPoint proceed){
try{
System.out.println("around==before========>");
proceed.proceed();
System.out.println("around==after====");

}catch(Throwable e){
e.getStackTrace();
}

}

}

3 定义注释的组件

@Component("userDaoImp")
public class UserDaoImp{

public UserDaoImp(){}

public void save() {
System.out.println("save======>");

}

public void delete() {
System.out.println("delete======>");

}

public void remove() {
System.out.println("remove======>");

}

}

4.测试

public class TestAop {

private static ApplicationContext ac = new
ClassPathXmlApplicationContext("com/donghua/aop/annotation/applicationContext.xml");
@Test
public void testaop(){
UserDaoImp user = (UserDaoImp) ac.getBean("userDaoImp");
System.out.println(user.getClass());
user.delete();
user.save();
user.remove();
}
}

结果:

class com.donghua.aop.annotation.UserDaoImp$$EnhancerByCGLIB$$1cb1e29b
before==========>
delete======>
afterreturn==========>
before==========>
save======>
afte==========>
afterreturn==========>
before==========>
around==before========>
remove======>
around==after====
afterreturn==========>

AOP annotation的更多相关文章

  1. 使用AOP+Annotation实现操作日志记录

    先创建注解 OperInfo @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @ ...

  2. 尚学堂Spring视频教程(六):AOP Annotation

    此处省略N个字.... 直接看下面 推荐链接: Spring Aop实例之AspectJ注解配置

  3. Spring 一二事(10) - annotation AOP

    先贴出POM的内容,这个毕竟是用的maven来简单构建的 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:x ...

  4. 转载:Spring AOP (下)

    昨天记录了Spring AOP学习的一部分(http://www.cnblogs.com/yanbincn/archive/2012/08/13/2635413.html),本来是想一口气梳理完的.但 ...

  5. Spring学习4-面向切面(AOP)之aspectj注解方式

    一.简介    1.AOP用在哪些方面:AOP能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任,例如事务处理.日志管理.权限控制,异常处理等,封装起来,便于减少系统的重复代码,降低模块间的耦合 ...

  6. 【Spring五】AOP之使用注解配置

    AOP使用注解配置流程: 1.当spring容器启动时候.    < context:component- scan base-package= "cn.itheima03.sprin ...

  7. Spring AOP (下)

    4.方式二:schema配置 a.业务类: /** * 业务类 * * @author yanbin * */ public class AspectBusiness { /** * 切入点 */ p ...

  8. Spring 入门 AOP

    通过一个小例子演视怎么使用 Spring 现实面向切面编程. 导入 Spring 所需要的包 spring-framework-2.5.6 版需要导入以下包: 1.----- spring.jar 2 ...

  9. JavaEE开发之Spring中的依赖注入与AOP

    上篇博客我们系统的聊了<JavaEE开发之基于Eclipse的环境搭建以及Maven Web App的创建>,并在之前的博客中我们聊了依赖注入的相关东西,并且使用Objective-C的R ...

随机推荐

  1. NOI2015 Day2

    NOI2015 Day2 荷马史诗 题目描述:给出\(n\)个数,要求\(n\)个\(k\)进制数来对应这\(k\)个数(允许有前导零),\(n\)个\(k\)进制数互不为前缀,求\(n\)个数乘以对 ...

  2. Exec sql/c

    Exec sql/c 利用高级语言的过程性结构来弥补SQL语言实现复杂应用方面的不足. 嵌入SQL的高级语言称为主语言或宿主语言. 在混合编程中,SQL语句负责操作数据库,高级语言语句负责控制程序流程 ...

  3. AspectJ AOP例子

    最近在学习Spring AOP,其中涉及到AspectJ的AOP框架.主要参考:http://howtodoinjava.com/spring/spring-aop/spring-aop-aspect ...

  4. android 屏幕适配问题【转】

      如何将一个应用程序适配在不同的手机上,虽然这不算是一个技术问题,但是对于刚刚做屏幕的开发人员来说,还真不是一件多么简单的事情. 首先:你需要在AndroidManifest.xml文件的<m ...

  5. wxWidgets刚開始学习的人导引(2)——下载、安装wxWidgets

    wxWidgets刚開始学习的人导引全目录   PDF版及附件下载 1 前言2 下载.安装wxWidgets3 wxWidgets应用程序初体验4 wxWidgets学习资料及利用方法指导5 用wxS ...

  6. OracleOraDb10g_home1TNSListener服务无法启动

    启动OracleOraDb10g_home1TNSListener服务的时候就报错:“Windows无法启动OrcleOraDb11g_home1TNSListener服务(位于本地计算机上). 错误 ...

  7. SQL学习之使用常用函数处理数据

    一.在介绍使用函数处理数据前,先说下使用DBMS(数据库管理系统)处理数据所带来的问题! 1.与几乎所有的DBMS都同等的支持SQL语句(如SELECT)不同,每一个DBMS都有特定的函数,事实上,只 ...

  8. ContentType 属性 MIME

    ".asf" = "video/x-ms-asf" ".avi" = "video/avi" ".doc&qu ...

  9. iOS内购的订单对应和补单

    内购的关键类: 1.SKPayment(SKMutablePayment可将自己的参数一对一与苹果产生的payment对应起来) 2.TransactionObserver:交易状态更新时执行此方法, ...

  10. HOJ1008

    #include<iostream> using namespace std; int main(){ ; ; ){ ; ; numTemp = N; ) && count ...