`

Spring 中 使用自定义Annotation 和 Spring AOP结合

阅读更多


 

 

======================Loggable 

package com.hub.mymvn.aopanno;
 
public @interface Loggable {
 
}
 
======================Employee

 

package com.hub.mymvn.aopanno;

 

import org.springframework.stereotype.Component;

 

@Component

publicclassEmployee {

 

       private String name;

 

       public String getName() {

             returnname;

       }

 

       @Loggable

       publicvoid setName(String name) {

             System.out.println("Start to set name as "+name);

             this.name = name;

       }

      

       publicvoid throwException(){

        thrownew RuntimeException("Dummy Exception");

    }

      

      

}

 


 

====================== EmployeeService

package com.hub.mymvn.aopanno;

 

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

 

@Service

publicclass EmployeeService {

 

       @Autowired

       private Employee employee;

   

    public Employee getEmployee(){

        returnthis.employee;

    }

    

    publicvoid setEmployee(Employee e){

        this.employee=e;

    }

}

 

====================== EmployeeAnnotationAspect

package com.hub.mymvn.aopanno;

 

import org.aspectj.lang.annotation.Aspect;

import org.aspectj.lang.annotation.Before;

import org.springframework.stereotype.Component;

 

@Aspect

@Component

publicclassEmployeeAnnotationAspect {

 

    @Before("@annotation(com.hub.mymvn.aopanno.Loggable)")

    publicvoid myAdvice(){

        System.out.println("Executing myAdvice!!");

    }

   

    /*

    @Before("execution(public String getName())")

    public void getNameAdvice(){

        System.out.println("Executing Advice on getName()");

    }

    

    @Before("execution(* com.journaldev.spring.service.*.get*())")

    public void getAllAdvice(){

        System.out.println("Service method getter called");

    }

    */

}

======================

package com.hub.mymvn.aopanno;

 

import org.junit.Test;

import org.junit.runner.RunWith;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.test.context.ContextConfiguration;

import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import org.springframework.validation.BindException;

import org.springframework.validation.Validator;

 

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(locations = "classpath:applicationContext.xml")

public class DemoTest {

         

          @Autowired

          private EmployeeService employeeService;

 

          @Test

          public void helloTest() {

                    System.out.println("Start helloTest");

                    Employee e = employeeService.getEmployee();

                    System.out.println(e);

                    System.out.println(e.getName());

                    e.setName("XXX");

                    System.out.println(e.getName());

                    System.out.println("End helloTest");

          }

}

======================运行结果

Start helloTest

com.hub.mymvn.aopanno.Employee@7f5338bf

null

Executing myAdvice!!

Start to set name as XXX

XXX

End helloTest

 

 

 

 

 

  • 大小: 31.6 KB
1
2
分享到:
评论

相关推荐

    spring中自定义注解(annotation)与AOP中获取注解

    在Spring框架中,自定义注解(Annotation)和AOP(面向切面编程)的结合使用,极大地增强了代码的可读性和可维护性。本文将深入探讨如何在Spring中创建自定义注解以及如何在AOP中有效地获取并利用这些注解。 首先,...

    Spring_Annotation_AOP

    6. **连接点(JoinPoint)**: AOP中的连接点是指程序执行过程中可以插入切面的一个点,比如方法调用。 7. **通知(Advice)**: 通知是在特定连接点执行的代码片段,可以是前置通知、后置通知、返回通知、异常通知或...

    spring aop实例annotation方法实现

    为了启用注解驱动的AOP,需要在Spring配置文件中添加`<aop:aspectj-autoproxy>`元素,或者在Java配置中使用`@EnableAspectJAutoProxy`注解。 ```xml <aop:aspectj-autoproxy /> ``` 或者 ```java @Configuration ...

    spring 2.0使用AOP实例(基于Annotation的配置方式)

    以上就是Spring 2.0中使用AOP的一个基本实例,基于注解的配置方式使得AOP的使用更加直观和简洁。在实际开发中,我们可以根据需求灵活地定义切面和通知,以实现各种横切关注点的功能。 通过阅读提供的压缩包中的`src...

    spring中aop的简单使用(Annotation方式)

    本文将详细介绍如何在Spring中使用AOP,特别是通过注解的方式。 首先,我们需要理解AOP的基本概念。AOP的核心是切面(Aspect),它封装了特定的关注点,如日志记录或事务管理。切点(Pointcut)定义了在何时应用...

    Spring Boot中自定义注解结合AOP实现主备库切换问题

    Spring Boot 中自定义注解结合 AOP 实现主备库切换问题 在 Spring Boot 应用程序中,实现主备库切换是非常重要的,以减少...同时,我们也学习了如何使用 Spring Boot 中的自定义注解和 AOP 机制来实现一些特殊的逻辑。

    spring自定义注解样例

    在Spring AOP中,我们可以通过`@Aspect`注解定义一个类作为切面,并使用`@Before`、`@After`、`@Around`等注解来定义通知(advice),这些通知会在特定的方法执行前后被调用。 ```java @Aspect @Component public ...

    简单spring aop 例子

    在Spring AOP中,切面主要通过两种方式实现:代理(Proxies)和织入(Weaving)。 1. **代理**:Spring AOP支持两种类型的代理:JDK动态代理和CGLIB代理。JDK代理用于实现了接口的类,而CGLIB代理则用于没有接口或...

    Spring3.0.5扩展支持AOP获取HttpServletResponse

    在Spring 3.0.5中,为了在AOP中使用`HttpServletResponse`,你需要创建一个切面,该切面包含一个通知,该通知可以访问并操作`HttpServletResponse`。通常,你会在切面中定义一个环绕通知(Around Advice),因为它...

    【Spring AOP】@Aspect结合案例详解(一): @Pointcut使用@annotation + 五种通知

    在微服务流行的当下,在使用SpringCloud/Springboot框架开发中,AOP使用的非常广泛,尤其是@Aspect注解方式当属最流行的,不止功能强大,性能也很优秀,还很舒心!所以本系列就结合案例详细介绍@Aspect方式的切面的...

    Spring 自定义注解的解析

    接下来,我们将讨论如何在Spring中使用`@ComponentScan`注解来扫描并处理自定义注解。`@ComponentScan`是Spring的核心组件扫描机制,它会遍历指定包及其子包下的所有类,寻找标记了Spring的组件注解(如`@Component`...

    spring学习之五“AOP概念及使用Annotation的实现”

    在Spring框架中,有两种主要的方式来实现AOP:基于XML配置和基于注解。本篇“spring学习之五”主要介绍的是注解驱动的AOP实现。 1. **定义切面**:在Spring中,我们通常通过创建一个带有`@Aspect`注解的类来定义切...

    spring aop 自定义缓存实现

    这个实例中的压缩包可能包含了配置文件、源代码和测试案例,你可以通过解压`demo-caching-with-spring-aop-master`来查看完整的实现,学习如何配置Spring AOP,以及如何定义和使用自定义缓存注解。 总的来说,...

    Spring AOP + AspectJ annotation example

    总结来说,Spring AOP与AspectJ注解的结合使用是Java开发中的强大工具,它们提供了一种优雅的方式来管理横切关注点,提高了代码的可读性和可维护性。通过学习和熟练掌握这一技术,开发者能够更好地应对复杂的企业级...

    springboot+aspect实现springaop拦截指定方法.zip

    综上所述,SpringBoot结合AspectJ实现SpringAOP拦截指定方法,主要涉及到Spring AOP的原理、切点和通知的定义、自定义注解的使用,以及如何在SpringBoot项目中整合AspectJ进行更复杂的切面编程。通过这些知识点,...

    Spring_aop_annotation.zip

    本实践项目以"Spring_aop_annotation.zip"为载体,展示了如何利用注解在Spring框架中实现AOP的功能。下面将详细阐述该项目中的关键知识点。 一、Spring AOP概念 AOP是Aspect Oriented Programming的缩写,它是一种...

    Spring mvc Aop+annotation实现系统日志记录功能实现的jar包

    Spring mvc Aop+annotation实现系统日志记录功能实现的jar包asm-3.3.jar ,aspectjrt.jar , aspectjweaver.jar , cglib-nodep-2.1_3.jar , spring-aop.jar

    Spring基础:Spring AOP简单使用

    - **XML配置**:在Spring的配置文件中,可以使用<aop:config>标签来定义切面,<aop:pointcut>定义切点,<aop:advisor>定义通知,<aop:aspect>将切点和通知关联起来。 - **注解配置**:Spring 2.5引入了基于注解的...

    基于注解配置和使用spring AOP(spring mvc框架)

    在Spring AOP中,切面可以是Java类或@Aspect注解的类。 2. **通知(Advice)**:通知是指在特定连接点执行的代码块,如方法调用前、后或异常发生时。Spring支持五种不同类型的通知:前置通知(before)、后置通知...

    spring aop xml 实例

    在Java开发领域,Spring框架以其强大的功能和灵活性深受开发者喜爱,而Spring AOP(面向切面编程)则是Spring框架中的一个重要组成部分。AOP允许开发者定义“切面”,它是一种将关注点分离的方式,使得我们可以把...

Global site tag (gtag.js) - Google Analytics