`
yinghuayu1324117
  • 浏览: 67538 次
  • 性别: Icon_minigender_2
  • 来自: 保定
文章分类
社区版块
存档分类

使用注解创建通知

阅读更多

使用注解创建通知

前面讲了创建通知,现在用注解来创建通知

具体案例分析

public interface Service {

    /**去公司*/

    public void goCompany();

    /**签到*/

    public void signIn();

    /**请假*/

    public void leave(Exception ex);

    /**回家*/

    public void goHome();

}

@Aspect//@Aspect是声明切面

public class ServiceImpl implements Service{

    /**

     *  第一个* 代表方法的返回值

     *  第二个work()代表的是方法的名称

     * */

//前置通知

    @Before("execution(* work())") 

    public void goCompany() {System.out.println("去公司。。。");}

//前置通知

    @Before("execution(* EmpServiceImpl.*(..))")

    public void signIn() {

       System.out.println("签到");

    }

    /**

     * 第一个*代表的是方法的返回值

     * 第二个cn.csdn.service.Emp* 位于cn.csdn.service包中前缀是Emp的所有类

     * 第三个Emp*.后的*代表的是这个类中的所有方法

     * 第四个(..)代表的是方法的参数可以是可变的参数

     * */

//后置通知

    @After("execution(* cn.csdn.service.Emp*.*(..))")

    public void goHome() {

       System.out.println("回家。。。");

    }

//异常通知

@AfterThrowing(pointcut="execution(* *..EmpService*.*(..))",throwing="ex")

    public void leave(Exception ex) {

       System.out.println("请假"+ex.getMessage());

    }

}

public interface EmpService {

    void work();

}

public class EmpServiceImpl implements EmpService{

    @Override

    public void work() {

       System.out.println("员工正在工作。。。。");

    }

}

public interface AroundService {

    public Object eat(ProceedingJoinPoint pj);

}

//环绕通知切面的具体实现

@Aspect

public class AroundServiceImpl implements AroundService{

    @Around("execution(* EmpService.*(..))")

    public Object eat(ProceedingJoinPoint pj) {

       System.out.println("吃完饭就去上班。。。");

       try {

           Object ob=pj.proceed();

    // 注:proceed()方法会调用目标方法

           System.out.println("工作后要签到的。。。");

           return ob;

       } catch (Throwable e) {

           System.out.println("下班回家喽。。。");

           e.printStackTrace();

       }

       return null;

    }

}

public class App {

@Test

public void test(){

/*解析xml文件创建容器对象*/

ApplicationContext ac=new ClassPathXmlApplicationContext("app*.xml");

/*接口代理*/

    EmpService empService=(EmpService)ac.getBean("empServiceImpl");

    empService.work();

    }

}

<?xml version="1.0" encoding="UTF-8"?>

<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-2.0.xsd

    http://www.springframework.org/schema/aop

    http://www.springframework.org/schema/aop/spring-aop-2.5.xsd ">

<!—注意一定要配xmlns:aop="http://www.springframework.org/schema/aop"-->

<!-- aspectjbean -->

<bean id="serviceImpl" class="cn.csdn.service.ServiceImpl"/>

<!-- 环绕通知的切面的具体实现的bean -->

<bean id="aroundServiceImpl" class="cn.csdn.service.AroundServiceImpl"/>

<!-- 业务操作的bean -->

<bean id="empServiceImpl" class="cn.csdn.service.EmpServiceImpl"/>

    <!—注意:一定要启用Spring@AspectJ的支持 -->

    <aop:aspectj-autoproxy/>

</beans>

 

分享到:
评论

相关推荐

    安卓消息推送通知栏相关-Eclipse的关于通知notification的小应用源码有注释供参考.rar

    Eclipse的关于通知notification的小应用,源码有注释,供参考.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。

    如何在Spring Boot中使用@Before注解

    在Spring Boot中,我们可以使用@Before注解来实现AOP的Before通知类型。@Before通知表示在目标方法执行之前,将会先执行切面逻辑。这是一种常用的AOP通知类型,常用于日志记录、安全性检查等方面。 下面详细解释...

    SpringBoot中的AOP+自定义注解(源代码)

    2.4 编写切面类(使用注解 `@Aspect`): 2.5 测试类(注意该类必须写在java目录下) 2.6 切面类代码优化 3.AOP 中使用自定义注解 3.0 创建一个SpringBoot项目 3.1 引入 POM 依赖 3.1.1 引入springboot aop依赖 ...

    如何使用Spring Boot的@Pointcut注解

    为了帮助读者更好地理解@Pointcut注解的实际应用,我们提供了一个完整的Spring Boot示例代码,展示了如何创建一个切面类并在其中使用@Pointcut注解。通过该示例,我们记录了服务类中方法的执行时间,并在运行时得到...

    notifyer-electron:通知程序:使用Electron,Vue JS和MS OneNote API围绕桌面通知构建的应用程序

    开始使用登录或创建一个免费的。 在您的默认/主要笔记本中,创建一个名称为Quotes的部分。 在“报价”部分添加一些注释。 。 运行该应用程序并登录。 只想演示该应用程序? ,我将给您发送凭据。帮助该应用程序每5...

    Spring.html

    注意:使用注解的方式,最终通知和后置通知顺序换了,建议使用环绕通知 注解 配置 声明式事务管理 PlatFormTransactionManager:平台事务管理器:定义了commit/rollback Mybatis/jdbc:...

    chatwebsocket:使用 JavaEE7 Websocket 规范创建的简单聊天

    要创建一个 websocket 服务器端点,这只不过是处理来自客户端和服务器的通信事件的服务器端代码,您需要使用 @ServerEndpoint 注释来注释您的类并传递将成为入口点的路径与您的服务器端应用程序进行通信。

    FBAnnotationClustering, 简单而高效的集群地图通知iOS库.zip

    FBAnnotationClustering, 简单而高效的集群地图通知iOS库 FBAnnotationClustering FBAnnotationClustering是一个用于按简单而高效的方式聚集地图通知的iOS库。 查看博客文章 。...使用注释初始化,或者稍后添

    Spring in Action(第2版)中文版

    4.2.1创建通知 4.2.2定义切点和通知者 4.2.3使用proxyfactorybean 4.3自动代理 4.3.1为spring切面创建自动代理 4.3.2自动代理@aspectj切面 4.4定义纯粹的pojo切面 4.5注入aspectj切面 4.6小结 第二部分企业...

    ESM_ArcSight控制台用户指南(中文翻译版—Zephyr)_6.11.0 .pdf

    高级示例: 使用速度模板创建自定义列 192 使用控制面板 193 监视控制面板 193 管理控制面板 196 创建或编辑控制面板 196 将数据监视器添加到控制面板 198 将查询查看器添加到控制面板 200 控制面板显示格式 201 管理...

    Spring in Action(第二版 中文高清版).part2

    4.2.1 创建通知 4.2.2 定义切点和通知者 4.2.3 使用ProxyFactoryBean 4.3 自动代理 4.3.1 为Spring切面创建自动代理 4.3.2 自动代理@AspectJ切面 4.4 定义纯粹的POJO切面 4.5 注入AspectJ切面 4.6 小结 ...

    Spring in Action(第二版 中文高清版).part1

    4.2.1 创建通知 4.2.2 定义切点和通知者 4.2.3 使用ProxyFactoryBean 4.3 自动代理 4.3.1 为Spring切面创建自动代理 4.3.2 自动代理@AspectJ切面 4.4 定义纯粹的POJO切面 4.5 注入AspectJ切面 4.6 小结 ...

    SpringBoot下的SpringAOP-day04-源代码

    SpringBoot下的Spring——DAY04——动态代理总结、AOP、自定义注解进行拦截、动态获取注解参数、通知方法 1.动态代理总结 1.1 JDK动态代理特点 1.2 CGlib动态代理 1.2.1 CGLib特点说明 1.3 动态代理的作用 2 Spring...

    spring.net中文手册在线版

    12.6.使用ProxyFactory类以编程方式创建AOP代理 12.7.管理目标对象 12.8.使用“自动代理”功能 12.8.1.自动代理对象的定义 12.8.1.1.ObjectNameAutoProxyCreator 12.8.1.2.DefaultAdvisorAutoProxyCreator 12.8.1.3....

    jira用户操作指南(详细版)

    你可能会收到包括问题主要信息以及带有问题超级链接的通知邮件。 要查看所有你创建的还没有解决的问题列表, 跳转到你的 用户配置页面,并点击 '我报告 & 开放的'过滤器。 如果JIRA管理员进行了高级配置, 你还可以 ...

    Access+2000中文版高级编程

    Access2000中文版高级编程 目录 第一部分 编程基础 1 第1章 宏与代码 3 1.1 何时使用代码代替宏 4 1.1.1 何时用宏 4 ...1.2.1 使用DoCmd对象 5 ...14.3.4 使用VBA创建和填充ListView控件 ...

    Access 2000中文版高级编程(part1)

    12.2.1 使用“自动创建数据页:纵栏式” 364 12.2.2 使用数据页向导 365 12.3 创建及完善简单的数据访问页 369 12.3.1 数据访问页的字段列表 369 12.3.2 添加超级链接 370 12.3.3 在数据访问页中使用表达式 374...

    VISUAL BASIC 编程标准

    8.1.11 使用内部注释来说明代码进程 118 8.1.12 用行尾注释来说明变量 122 第9章 循环结构 123 9.1 编码指导原则 123 9.1.1 使用For...Next,使代码循环运行 规定的次数 123 9.1.2 使用Do...loop,使循环按照未定 ...

    python大作业基于django+APScheduler的定时任务管理系统源码.zip

    功能:基于python+APScheduler的定时任务管理系统,目前定时执行的任务为获取指定网页的源码并与关键字比对,若比对通过则发送邮件通知。 开发语言及框架为后端为:python+django 安装教程 系统中完成python3安装后...

Global site tag (gtag.js) - Google Analytics