`
yinghuayu1324117
  • 浏览: 69527 次
  • 性别: 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>

 

分享到:
评论

相关推荐

    Spring 使用注解来实现通知

    通过以上内容,我们可以看出,Spring使用注解实现通知,极大地简化了AOP的使用,使得切面逻辑与业务逻辑更易于分离,同时也提高了代码的可读性和可维护性。在实际开发中,合理运用这些通知类型,可以有效提升代码的...

    AOP中的注解自动装配通知

    在Java中,Spring框架提供了对AOP的强大支持,包括使用注解进行自动装配通知的功能。 标题"AOP中的注解自动装配通知"主要涉及两个关键概念:AOP和注解自动装配。首先,让我们详细了解一下这两个概念: **面向切面...

    使用Spring的注解方式实现AOP的细节

    在Spring中,我们可以使用注解来声明切面、切点和通知。下面将详细介绍这些关键组件: 1. **@Aspect**: 这个注解用于标记一个类作为切面,这个类通常会包含切点和通知。 ```java @Aspect public class ...

    spring AOP注解的应用1

    1. **创建Aspect(切面)**:定义一个类,并使用`@Aspect`注解标记它。 2. **定义切入点(Pointcut)**:使用`@Pointcut`注解定义切入点表达式,匹配需要拦截的方法。 3. **编写通知(Advice)**:使用`@Before`、`@...

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

    【Android消息推送通知栏】是Android系统中一个重要的特性,用于在用户不直接与应用程序交互时,向...通过阅读、理解和修改源码,开发者可以深入掌握通知的使用,从而在自己的项目中实现更高效、更个性化的通知功能。

    Spring之AOP注解之引入通知

    然后创建一个切面类,并使用`@AspectJ`和`@DeclareParents`注解来实现引入: ```java @Aspect public class DebuggableAspect { @DeclareParents(value = "com.example.Calculator+", defaultImpl = ...

    SpringBoot AOP各种注解、自定义注解、鉴权使用案例(免费下载)

    例如,我们可以使用`@Before`注解实现一个简单的方法调用前的日志记录: ```java @Aspect @Component public class LoggingAspect { @Before("execution(* com.example.service.*.*(..))") public void logBefore...

    使用注解实现AOP

    在Java世界中,Spring框架提供了基于注解的AOP实现,大大简化了AOP的使用。本篇文章将深入探讨如何使用注解实现AOP,以及其背后的原理。 首先,我们需要了解Spring AOP中的几个核心概念: 1. 切面(Aspect):切面...

    最全的Notifications通知栏

    1. **创建通知**:创建通知通常涉及创建`NotificationCompat.Builder`对象,设置通知的各种属性,如标题、内容、图标、优先级等。然后调用`build()`方法来构建`Notification`对象。 2. **通知频道(Notification ...

    使用Spring的注解方式实现AOP

    1. `@Aspect`:这个注解用于定义一个切面类,该类包含了若干个通知(advice)。 2. `@Before`:在目标方法执行前执行的通知,相当于传统的“前置通知”。 3. `@After`:在目标方法执行后总是执行的通知,无论目标...

    注解方式实现AOP编程

    最后,Spring会自动扫描并处理所有相关的注解,创建代理对象,并在适当的时间点执行通知。 总结一下,注解方式实现AOP编程主要包括以下几个步骤: 1. 创建一个`@Aspect`注解的类来定义切面。 2. 使用`@Pointcut`...

    使用NSNotificationCenter的通知发布及监听DEMO

    创建通知** 发布通知通常涉及到以下几步: - 定义通知名称:一个字符串常量,作为通知的唯一标识。 - 创建NSNotification对象:可以包含额外的用户信息。 - 使用NotificationCenter的`post`方法发布通知。 ```...

    spring的Aop中的前置通知,后置通知以及环绕通知简单代码

    它们可以通过实现`org.springframework.aop.AfterReturningAdvice`和`org.springframework.aop.ThrowsAdvice`接口来创建,或者使用`@AfterReturning`和`@AfterThrowing`注解。 ```java @Aspect public class ...

    sping aop注解配置

    6. **切点与通知的关联**:使用`@Before`, `@After`, `@AfterReturning`, `@AfterThrowing`或`@Around`注解,将通知与之前定义的切入点关联起来。注解中的`value`属性是切入点表达式,也可以直接引用已定义的`@...

    Menu菜单 通知栏

    创建通知的基本步骤如下: 1. **构建Notification对象**:使用`NotificationCompat.Builder`类创建一个通知构建器,设置通知的标题、内容、图标等属性。 2. **设置通知行为**:你可以设置通知的点击行为,比如启动...

    java注解jar包

    定义注解涉及到创建一个注解类型,这可以通过@interface关键字完成。处理注解是指解析和执行注解中包含的信息,这通常是通过编译器或自定义注解处理器实现的。最后,使用注解就是在代码中合适的位置应用定义好的注解...

    仿音乐播放器做的一个通知栏

    创建通知通常涉及以下几个步骤: 1. 创建`NotificationCompat.Builder`实例:这是构建通知的构造器,兼容不同的Android版本。例如: ```java NotificationCompat.Builder builder = new NotificationCompat.Builder...

    LabVIEW通知器控制多条件分支.rar

    在LabVIEW中,你可以从函数选板的“编程”类别中找到“创建通知器”函数,这将创建一个唯一的通知器句柄。接着,你可以用“发布”(Post)函数向通知器发送数据或状态,而“订阅”(Subscribe)函数则用于注册接收...

    dwr+spring 注解方式

    使用`@Aspect`注解创建切面,然后在切面内定义`@Before`、`@After`、`@Around`等通知。 6. **Spring的事务管理**: - DWR调用的方法如果涉及到数据库操作,可以通过Spring的`@Transactional`注解来实现事务控制。 ...

    Spring AOP 注解方式

    接下来,我们可以使用`@Around`注解创建环绕通知,以控制方法的执行流程,包括内部方法: ```java @Around("myServiceMethods()") public Object profileService(ProceedingJoinPoint pjp) throws Throwable { long...

Global site tag (gtag.js) - Google Analytics