- 浏览: 207436 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (291)
- ERP (3)
- JSP/Servlet (13)
- DB (8)
- MongoDB (2)
- Python (3)
- Maven (8)
- GIT (1)
- Windows (8)
- Java (24)
- Informatica (2)
- PHP (1)
- Javascript (25)
- Tomcat (2)
- spring (13)
- HTML5 (11)
- Nginx (2)
- NodeJS (6)
- Linux (40)
- AngularJS (1)
- Android (3)
- Selenium (3)
- 理财 (6)
- 工作心得 (9)
- SQLServer (10)
- Hibernate/JPA (6)
- Bootstrap (1)
- C# (3)
- MySql (4)
- highchart (1)
- hadoop (5)
- ZooKeeper (2)
- Hbase (8)
- Avro (2)
- Hive (2)
- Flume (5)
- Kafka (11)
- Sqoop (3)
- Pig (1)
- Spark (1)
- Storm (2)
- Redis (1)
- Memcached (1)
- Dubbo (2)
- Phoenix (2)
最新评论
-
一尾金鱼:
可以作为查询手册了,页面布局也好~
JSP EL -
darkgost:
您好,我按照你的方法,在Service1.cs中添加如下代码: ...
C#Windows 服务制作安装删除. 用户注销后,程序继续运行
使用aspectj注解实现的AOP需要引入aspectj的lib
1. 首先启用 Spring 对 @AspectJ 切面配置的支持
2.定义切面 Bean
3. 目标Bean
4 测试
测试结果:
enter method: Peter
doBefore: Peter
doBefore2: Peter
Peter want to login.
exit method
doAfter
doAfterReturning:null
<dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.8.0</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.0</version> </dependency>
1. 首先启用 Spring 对 @AspectJ 切面配置的支持
<?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:context="http://www.springframework.org/schema/context" 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.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd"> <!-- scan all beans and inject dependence --> <context:component-scan base-package="com.myproject"/> <aop:aspectj-autoproxy/> </beans>
2.定义切面 Bean
@Component @Aspect public class LogInterceptor { @Pointcut("execution (!void com.myproject.example.service..*(..))") private void anyUnvoid(){} @Pointcut("within(com.myproject.example.service..*)") private void anyService(){} @Pointcut("anyUnvoid() && anyService()") private void anyUnvoidService(){} @Before("anyUnvoidService() && args(username, password)") public void doBefore(String username, String password){ System.out.println("doBefore: "+username); } /** * 第二种访问目标参数的方法。<br> * 将第一个参数定义为 JoinPoint 类型,当该增强处理方法被调用时, * 该 JoinPoint 参数就代表了织入增强处理的连接点。 */ @Before("anyUnvoidService()") public void doBefore2(JoinPoint jp){ Object[] args = jp.getArgs(); System.out.println("doBefore2: " +args[0]); } @AfterReturning(pointcut="anyUnvoidService()", returning="result") public void doAfterRunning(String result){ System.out.println("doAfterReturning:" +result); } @AfterReturning(pointcut="execution(* com.myproject.example.service.AccountService.Login(..))", returning="result") public void doAfterLogin(JoinPoint jp, Account result){ if(result!=null) System.out.println(result.getUsername() +" login success."); else System.out.println(jp.getArgs()[0] +" login fail."); } @AfterThrowing(pointcut="anyUnvoidService()", throwing="ex") public void doAfterThrowing(Throwable ex){ System.out.print("doAfterThrowing: "+ex.getMessage()); } @After("anyUnvoidService()") public void doAfter(){ System.out.println("doAfter"); } /** * Around 增强处理可替代所有其它增强处理。 * 它可改变执行目标方法的参数值,也可改变目标方法之后的返回值。 */ @Around("anyUnvoidService()") public Object doAround(ProceedingJoinPoint pjp) throws Throwable{ Object[] args = pjp.getArgs(); //obtain arguements System.out.println("enter method: "+args[0]); Object result = pjp.proceed(); System.out.println("exit method"); return result; } }
3. 目标Bean
@Service public class AccountService { @Resource private AccountDao accountDao; public Account Login(String username, String password){ System.out.println(username + " want to login."); return null; } }
4 测试
@Test public void test(){ ApplicationContext ac=new ClassPathXmlApplicationContext("spring.xml"); AccountService accountService =(AccountService)ac.getBean("accountService"); accountService.Login("Peter", "wetwe"); }
测试结果:
enter method: Peter
doBefore: Peter
doBefore2: Peter
Peter want to login.
exit method
doAfter
doAfterReturning:null
发表评论
-
获取spring 上下文的几种方法
2015-04-06 15:28 867获取spring 上下文的几种方法: 1. 通过配置 ... -
spring + jpa + hibernate
2014-06-11 20:48 10111. 添加依赖Jar文件。除了必要的spring和Hibern ... -
Spring 集成到web项目中
2014-06-10 20:17 5141. 在web.xml中配置实例化spring容器 & ... -
Spring + hibernate + ehcache
2014-06-10 18:02 588<?xml version="1.0" ... -
Spring XML配置事务管理
2014-06-10 16:55 831以下是XML配置事务管理的核心代码,其它配置参考 http:/ ... -
Spring 事务传播属性
2014-06-10 16:29 524一、Propagation (事务的传 ... -
Spring + jdbc +connection pool + transaction
2014-06-08 18:34 6381. 添加lib <dependency&g ... -
Spring AOP XML配置实现
2014-06-05 21:06 525<?xml version="1.0" ... -
Spring 依赖注入
2014-05-30 09:47 543Spring 处理使用XML配置文件进行依赖注入外, 还可以使 ... -
spring2 bean作用域 和 生命周期
2014-05-17 19:14 484一 作用域 1. singleton spring中bean的 ... -
Spring1 Bean实例化
2014-05-17 18:53 3691. Bean实例化的方法 a. 普通方法 public cl ... -
spring 3.0 应用springmvc 构造RESTful URL 详细讲解
2014-04-30 23:10 559博文转载: http://www.blogjava.net/b ...
相关推荐
基于注解实现SpringAop基于注解实现SpringAop基于注解实现SpringAop
2、能够清楚的知道如何用spring aop实现自定义注解以及注解的逻辑实现 (需要知道原理的请看spring aop源码,此处不做赘述) 3、可在现有源码上快速进行功能扩展 4、spring boot,mybatis,druid,spring aop的使用
本篇文章将深入探讨如何通过Spring的注解方式实现AOP的细节。 首先,我们需要了解AOP的基本概念。AOP的核心是切面(Aspect),它封装了跨越多个对象的行为或责任。切点(Pointcut)定义了哪些方法会被通知(Advice...
在Spring框架中,AOP(面向切面编程)是一...Spring AOP注解的应用使得切面编程更加简单直观,大大简化了对横切关注点的管理。在实际开发中,结合Spring提供的其他特性,如事务管理,可以构建出高效、健壮的后端系统。
本例子就是一个使用 Spring AOP 注解实现的项目,旨在展示如何在简单的环境中应用这一特性。 1. **AOP 基础概念** - **切面(Aspect)**: 包含一组相关功能的模块,这些功能在多个对象中都可能被用到,比如日志、...
总结起来,Spring AOP注解版通过简单易懂的注解,使得面向切面编程变得更加直观和方便。它降低了横切关注点与业务逻辑之间的耦合度,提高了代码的可维护性和复用性。通过合理利用这些注解,开发者可以轻松地实现日志...
**Spring AOP 实现机制详解** Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许程序员在不修改源代码的情况下,通过“切面”来插入额外的业务逻辑,如日志、事务管理等。AOP的引入极大地提高了代码的...
在Spring AOP中,我们通常使用@Aspect注解来定义切面类。切面类中可以包含多个通知(Advice),包括前置通知(Before)、后置通知(After)、返回通知(After-returning)、异常通知(After-throwing)和环绕通知...
这个"spring aop jar 包"包含了实现这一功能所需的类和接口,使得开发者能够轻松地实现面向切面的编程。 在Spring AOP中,主要涉及以下几个核心概念: 1. **切面(Aspect)**:切面是关注点的模块化,比如日志记录...
在本项目中,我们将探讨如何通过配置文件实现Spring AOP,包括前置通知、后置通知以及拦截器的运用。 首先,我们需要理解Spring AOP的核心概念。切面(Aspect)是关注点的模块化,这些关注点定义了跨越多个对象的...
Spring AOP提供了注解和XML两种方式来实现切面编程。注解方式更加简洁,易于理解和维护,适用于大多数情况。而XML配置方式则在复杂场景下更具灵活性,如需要动态调整切面配置时。在实际项目中,可以根据需求选择适合...
Spring支持两种AOP的实现方式:Spring AspectJ注解风格和Spring XML配置风格。使用AspectJ注解风格是最常见的,它允许开发者直接在方法上使用注解来定义切面。 Spring AOP中有五种不同类型的的通知(Advice): 1....
此外,Spring AOP还提供了一套强大的切点表达式和注解,使得切点和通知的定义更加简洁直观。 总结来说,Spring AOP通过动态代理实现了面向切面编程,利用反射在运行时生成代理对象并插入通知代码。这种设计让开发者...
在这个场景中,我们将使用Spring AOP来实现一个日志记录的功能,以追踪系统中各个方法的调用情况,包括访问时间以及传递的参数。下面将详细阐述如何实现这一目标。 首先,我们需要了解AOP的基本概念。AOP的核心是切...
1. 注解驱动的AOP:这是最常用的实现方式,通过在方法上添加注解(如`@Before`, `@After`, `@Around`, `@AfterReturning`, `@AfterThrowing`)来定义通知,并使用`@Aspect`注解定义切面。 2. XML配置驱动的AOP:...
Spring AOP,全称Aspect-Oriented Programming(面向切面编程),是Spring框架的一个重要模块,它通过提供声明式的方式来实现面向切面编程,从而简化了应用程序的开发和维护。在Spring AOP中,我们无需深入到每个...
**Spring AOP 学习笔记及实现Demo** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架中的一个重要组成部分,它提供了一种在不修改源代码的情况下,对程序进行功能增强的技术。AOP的主要目的...
"Spring AOP + 注解实现统一注解功能" 本文我们通过Spring AOP和Java的自定义注解来实现日志的插入功能,该方案对原有业务入侵较低,实现较灵活。下面我们将详细介绍该功能的实现原理和相关知识点。 1. 概述 在...
总结一下,通过上述步骤,我们已经在Spring Boot应用中利用Spring AOP和注解方式实现了数据脱敏。这个拦截器可以在不修改原有业务代码的情况下,确保敏感信息在响应给客户端之前得到处理,提高了应用的安全性。同时...
在 Spring 中,AOP 的实现主要依赖于代理模式,有两种代理方式:JDK 动态代理和 CGLIB 动态代理。 JDK 动态代理是基于接口的,它要求被代理的目标对象必须实现至少一个接口。Spring 使用 `java.lang.reflect.Proxy`...