package com.hub.mymvn.aopanno;
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
相关推荐
在Spring框架中,自定义注解(Annotation)和AOP(面向切面编程)的结合使用,极大地增强了代码的可读性和可维护性。本文将深入探讨如何在Spring中创建自定义注解以及如何在AOP中有效地获取并利用这些注解。 首先,...
6. **连接点(JoinPoint)**: AOP中的连接点是指程序执行过程中可以插入切面的一个点,比如方法调用。 7. **通知(Advice)**: 通知是在特定连接点执行的代码片段,可以是前置通知、后置通知、返回通知、异常通知或...
为了启用注解驱动的AOP,需要在Spring配置文件中添加`<aop:aspectj-autoproxy>`元素,或者在Java配置中使用`@EnableAspectJAutoProxy`注解。 ```xml <aop:aspectj-autoproxy /> ``` 或者 ```java @Configuration ...
以上就是Spring 2.0中使用AOP的一个基本实例,基于注解的配置方式使得AOP的使用更加直观和简洁。在实际开发中,我们可以根据需求灵活地定义切面和通知,以实现各种横切关注点的功能。 通过阅读提供的压缩包中的`src...
本文将详细介绍如何在Spring中使用AOP,特别是通过注解的方式。 首先,我们需要理解AOP的基本概念。AOP的核心是切面(Aspect),它封装了特定的关注点,如日志记录或事务管理。切点(Pointcut)定义了在何时应用...
Spring Boot 中自定义注解结合 AOP 实现主备库切换问题 在 Spring Boot 应用程序中,实现主备库切换是非常重要的,以减少...同时,我们也学习了如何使用 Spring Boot 中的自定义注解和 AOP 机制来实现一些特殊的逻辑。
在Spring AOP中,我们可以通过`@Aspect`注解定义一个类作为切面,并使用`@Before`、`@After`、`@Around`等注解来定义通知(advice),这些通知会在特定的方法执行前后被调用。 ```java @Aspect @Component public ...
在Spring AOP中,切面主要通过两种方式实现:代理(Proxies)和织入(Weaving)。 1. **代理**:Spring AOP支持两种类型的代理:JDK动态代理和CGLIB代理。JDK代理用于实现了接口的类,而CGLIB代理则用于没有接口或...
在Spring 3.0.5中,为了在AOP中使用`HttpServletResponse`,你需要创建一个切面,该切面包含一个通知,该通知可以访问并操作`HttpServletResponse`。通常,你会在切面中定义一个环绕通知(Around Advice),因为它...
在微服务流行的当下,在使用SpringCloud/Springboot框架开发中,AOP使用的非常广泛,尤其是@Aspect注解方式当属最流行的,不止功能强大,性能也很优秀,还很舒心!所以本系列就结合案例详细介绍@Aspect方式的切面的...
接下来,我们将讨论如何在Spring中使用`@ComponentScan`注解来扫描并处理自定义注解。`@ComponentScan`是Spring的核心组件扫描机制,它会遍历指定包及其子包下的所有类,寻找标记了Spring的组件注解(如`@Component`...
在Spring框架中,有两种主要的方式来实现AOP:基于XML配置和基于注解。本篇“spring学习之五”主要介绍的是注解驱动的AOP实现。 1. **定义切面**:在Spring中,我们通常通过创建一个带有`@Aspect`注解的类来定义切...
这个实例中的压缩包可能包含了配置文件、源代码和测试案例,你可以通过解压`demo-caching-with-spring-aop-master`来查看完整的实现,学习如何配置Spring AOP,以及如何定义和使用自定义缓存注解。 总的来说,...
总结来说,Spring AOP与AspectJ注解的结合使用是Java开发中的强大工具,它们提供了一种优雅的方式来管理横切关注点,提高了代码的可读性和可维护性。通过学习和熟练掌握这一技术,开发者能够更好地应对复杂的企业级...
综上所述,SpringBoot结合AspectJ实现SpringAOP拦截指定方法,主要涉及到Spring AOP的原理、切点和通知的定义、自定义注解的使用,以及如何在SpringBoot项目中整合AspectJ进行更复杂的切面编程。通过这些知识点,...
本实践项目以"Spring_aop_annotation.zip"为载体,展示了如何利用注解在Spring框架中实现AOP的功能。下面将详细阐述该项目中的关键知识点。 一、Spring AOP概念 AOP是Aspect Oriented Programming的缩写,它是一种...
Spring mvc Aop+annotation实现系统日志记录功能实现的jar包asm-3.3.jar ,aspectjrt.jar , aspectjweaver.jar , cglib-nodep-2.1_3.jar , spring-aop.jar
- **XML配置**:在Spring的配置文件中,可以使用<aop:config>标签来定义切面,<aop:pointcut>定义切点,<aop:advisor>定义通知,<aop:aspect>将切点和通知关联起来。 - **注解配置**:Spring 2.5引入了基于注解的...
在Spring AOP中,切面可以是Java类或@Aspect注解的类。 2. **通知(Advice)**:通知是指在特定连接点执行的代码块,如方法调用前、后或异常发生时。Spring支持五种不同类型的通知:前置通知(before)、后置通知...
在Java开发领域,Spring框架以其强大的功能和灵活性深受开发者喜爱,而Spring AOP(面向切面编程)则是Spring框架中的一个重要组成部分。AOP允许开发者定义“切面”,它是一种将关注点分离的方式,使得我们可以把...