- 浏览: 1064589 次
- 性别:
- 来自: 南京
文章分类
- 全部博客 (501)
- dwr (6)
- javascript (84)
- oracle (66)
- jsp/servlet (18)
- ant (3)
- 基础知识 (12)
- EXT (10)
- My SQL (10)
- java (71)
- spring (37)
- 学习的对象 (2)
- Linux (24)
- 面试 (1)
- HTML/CSS (11)
- tomcat (11)
- 收藏夹 (2)
- Power Designer (2)
- struts.xml配置文件 (1)
- sturts2 (3)
- myeclipse (8)
- eclipse (7)
- Maven (34)
- SVN (3)
- SAP JCO (2)
- JBOSS (11)
- webservice (8)
- word (1)
- 敏捷开发 (1)
- sybase (4)
- Nexus (3)
- EhCache (3)
- log4j (3)
- Cookie (4)
- Session (4)
- CXF (7)
- AXIS (2)
- SSO (1)
- LDAP (1)
- velocity (2)
- Jquery (5)
- redis (2)
- http (4)
- dojo (1)
- Linux资源监控软件mnon的安装与运用 (1)
- notepad++ (1)
- EA (1)
- UML (1)
- JasperReports (1)
- 权限 (0)
- freemarker (4)
- Spring MVC (1)
- JMS (1)
- activeMQ (1)
- hession (3)
- 安全 (1)
- ibatis (2)
- log (1)
- nginx (1)
最新评论
-
winhbb:
我刚好遇到了一个问题(在可以依赖注入的场合有效):有两个模块A ...
解决Maven项目相互依赖/循环依赖/双向依赖的问题 -
nanjiwubing123:
long3ok 写道你好 XmlOutputFormatter ...
用XStream转换复杂XML -
zhoujianboy:
另外一个方法实现eclipse tomcat 热部署:http ...
eclipse下实现maven项目在tomcat容器热部署方法 -
long3ok:
你好 XmlOutputFormatter 请问这个类是在什么 ...
用XStream转换复杂XML -
ganbo:
总结的好,文章给力。
解决Maven项目相互依赖/循环依赖/双向依赖的问题
从Spring 2.0开始,可以使用基于schema及@AspectJ的方式来实现AOP,本文以一个简单的实例介绍了如何以@AspectJ方式在Spring中实现AOP。由于@Aspect是基于注解的,因此要求支持注解的5.0版本以上的JDK。 环境要求: 1. Web应用 2. 有一个专门提供系统服务的Service层 我们的目标是,如果用户调用Service层中任一方法,都在其插入一个记录信息的功能。 1. 一个最简单的AOP 共有2步。 1.1 定义一个Aspect 1. package com.sarkuya.aop.aspect; 2. import org.aspectj.lang.annotation.Aspect; 3. import org.aspectj.lang.annotation.Before; 4. @Aspect 5. public class SampleAspect { 6. @Before("execution(* com.sarkuya.service..*.*(..))") 7. public void doBeforeInServiceLayer() { 8. System.out.println("====================================="); 9. System.out.println("Aop: do before in Service layer"); 10. System.out.println("====================================="); 11. } 12. } 第4行,必须使用@Aspect在类名之前注解。 第6行,当用户调用com.sarkuya.service包中任一类的任一方法,在调用前,Spring将自动执行下面的doBeforeInServiceLayer()方法,此方法只是简单地打印一些信息。 1.2 在Spring配置文件applicationContext.xml中配置 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" 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.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"> <aop:aspectj-autoproxy /> <bean class="com.sarkuya.aop.aspect.SampleAspect" /> <!-- ================ YOUR CONTENTS GOES BELOW =================== --> </bean> 就这么简单。 2. 将Pointcut及Advice分开 上面的Aspect中混杂了Pointcut及Advice,因此最好将其分开。共有3步。 2.1 定义Pointcut 1. package com.sarkuya.aop.aspect; 2. import org.aspectj.lang.annotation.Aspect; 3. import org.aspectj.lang.annotation.Pointcut; 4. @Aspect 5. public class SampleAspect { 6. @Pointcut("execution(* com.sarkuya.service..*.*(..))") 7. public void inServiceLayer() { 8. } 9. } Pointcut是植入Advice的触发条件。每个Pointcut的定义包括2部分,一是表达式,如第6行;二是方法签名,如第7行。方法签名必须是public及void型。可以将Pointcut中的方法看作是一个被Advice引用的助记符,因为表达式不直观,因此我们可以通过方法签名的方式为此表达式命名。因此Pointcut中的方法只需要方法签名,而不需要在方法体内编写实际代码。 2.2 定义Advice 1. package com.sarkuya.aop.advice; 2. import org.aspectj.lang.annotation.Aspect; 3. import org.aspectj.lang.annotation.Before; 4. @Aspect 5. public class SampleAdvice { 6. @Before("com.sarkuya.aop.aspect.SampleAspect.inServiceLayer()") 7. public void logInfo() { 8. System.out.println("====================================="); 9. System.out.println("Aop: do before in service layer"); 10. System.out.println("====================================="); 11. } 12. } 第4行,对于Advice,也只能使用@Aspect来注解。 第6行,与第1.1节中第6行不同,这次不是直接使用Pointcut的表达式,而是使用了Pointcut中的方法签名。 单独定义Pointcut的好处是,一是通过使用有意义的方法名,而不是难读的Pointcut表达式,使代码更加直观;二是Pointcut可以实现共享,被多个Advice直接调用。若有多个Advice调用某个Pointcut,而这个Pointcut的表达式在将来有改变时,只需修改一个地方,维护更加方便。 第7行,我们将Advice的方法法改为logInfo(),以更加明确此Advice的作用。 2.3 配置文件 <aop:aspectj-autoproxy /> <bean class="com.sarkuya.aop.advice.SampleAdvice" /> 只需配置SampleAdvice,无需配置SampleAspect。 3. 重构:明确Pointcut职责 对于SampleAspect来说,其主要职责是定义Pointcut,可以在此类中同时定义多个Pointcuts。但其类名反映不出这个特点,因此,应将其重构以明确其职责。 package com.sarkuya.aop.pointcut; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; @Aspect public class PointcutsDefinition { @Pointcut("execution(* com.sarkuya.service..*.*(..))") public void inServiceLayer() { } } 将SampleAspect重命名为PointcutsDefinition,并移到com.sarkuya.aop.pointcut包中。 对于SampleAdvice来说,只需改变@Before()的注解,指向 @Before("com.sarkuya.aop.pointcut.PointcutsDefinition.inServiceLayer()") 而Spring配置文件保持不变。 小结: 我们先从一个最简单的Aspect实例开始,了解AOP的作用及最基本的要求,再重构为更有意义的代码,明确了AOP中的Pointcut及Advice的概念,有助于我们构建更复杂的Aspect。 【转载地址】 http://blog.csdn.net/tanghw/article/details/3862987
发表评论
-
Spring MVC 3.1新特性 生产者、消费者请求限定
2015-06-15 07:42 715参考地址: http://www.iteye.com/to ... -
CSRF TOKEN
2015-02-14 18:02 1146package com.uncle5.pubrub.web.c ... -
Spring MVC Controller单例陷阱
2014-06-27 08:51 682Spring MVC Controller默认是 ... -
[Spring] Hessian权限认证,加密前面
2014-03-06 09:52 1615Hessian的一些基本简介已经在上一节已经全部介绍了,上一节 ... -
FieldRetrievingFactoryBean 和 MethodInvokingFactoryBean
2014-01-09 18:36 1021spring提供了filed的值注入和method的返回值注入 ... -
Spring中ApplicationContext的事件机制(二 内定事件)
2014-01-09 11:08 12342在Spring中已经定义了五个标准事件,分别介绍如下: 1) ... -
当spring 容器初始化完成后执行某个方法 .
2014-01-08 17:40 1444在某些应用中,我们希望,当spring 容器将所有的bea ... -
spring学习之springMVC 返回类型选择 以及 SpringMVC中model,modelMap.request,session取值顺序
2013-09-12 10:43 1215spring mvc处理方法支持如下的返回方式:ModelA ... -
JSR-303
2013-09-12 00:22 932JSR-303 是JAVA EE 6 中的一项子规范,叫做Be ... -
EHCACHE分布式缓存
2013-09-06 17:26 1314从1.2版本开始,Ehcache可 ... -
springMVC+freemarker整合
2013-09-06 16:39 1435springMVC整合大家都比较熟悉了吧主要有以下几个步骤: ... -
Spring MVC 学习笔记 Viewresol和View
2013-09-06 15:34 931Spring MVC使用ViewResolver来根据cont ... -
Spring的PropertyPlaceholderConfigurer应用
2013-09-06 15:04 3223Spring 利用PropertyPlaceholderCon ... -
SpringSecurity3_Logout
2013-08-22 16:07 2584Logout¶•退出登录的链接 <a href=&quo ... -
spring的default-lazy-init参数 .
2013-04-23 20:08 979spring在启动的时候,会默认加载会默认加载整个对象实例图, ... -
Spring MVC 如何防止XSS、SQL注入攻击
2013-04-16 15:40 1684在Web项目中,通常需要处理XSS,SQL注入攻击,解决这个问 ... -
Spring JMS
2013-01-08 10:48 986http://blog.csdn.net/shiqiang12 ... -
给spring jdbctemplate加上一层“绮丽外衣”-动态SQL&&SQL语句以文件存放
2013-01-07 16:00 3307给spring jdbctemplate加上一层“华丽外衣”- ... -
使用Spring的NamedParameterJdbcTemplate完成DAO操作 .
2013-01-07 14:54 1186NamedParameterJdbcTemplate内部包含了 ... -
cron表达式(quartz中时间表达式)
2012-12-20 15:54 1003http://sosuny.iteye.com/blog/46 ...
相关推荐
一个基于@AspectJ的spring2.0 AOP应用实例,很小很简单,没有任何额外信息,最适合AOP入门学习。使用log4j打印信息。把项目直接import进myeclipse就可以使用啦......
**Spring的AOP实例——XML与@AspectJ双版本解析** Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和声明式的方式来处理系统的交叉关注点,如日志、事务管理等。AOP的核心概念包括切面...
**Spring AOP与AspectJ详解** 在现代软件开发中,面向切面编程(Aspect-Oriented Programming,简称AOP)是一种强大的设计模式,它允许我们分离关注点,将横切关注点(如日志、事务管理、权限控制等)与核心业务...
本实例将详细探讨如何通过注解(Annotation)来实现Spring AOP的方法拦截。 一、Spring AOP基础 Spring AOP是Spring框架的一部分,它提供了一种在运行时织入横切关注点(如日志、事务管理等)到目标对象的能力。AOP...
在这个入门实例中,我们将深入理解Spring AOP如何实现简单日志记录。 首先,AOP的核心概念包括切面(Aspect)、通知(Advice)、连接点(Join Point)、切入点(Pointcut)和织入(Weaving)。切面是AOP中的核心...
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和声明式的方式来处理系统中的交叉关注点问题,如日志、事务管理、安全性等。本示例将简要介绍如何在Spring应用中实现AOP,通过实际的...
### Spring2-AOP入门实例教程知识点详解 #### 一、Spring框架概述 - **轻量级J2EE开发框架**:Spring是一个轻量级的Java应用框架,它为开发复杂的企业级应用提供了一种简化的方法。 - **发展历程**:自2002年发布...
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种强大的方式来实现横切关注点,如日志、事务管理、安全性等,从而解耦应用程序的核心业务逻辑。在Spring AOP中,关注点被模块化为独立的“切面”...
通过这个实例,你不仅可以掌握Spring AOP的基本操作,还能了解到如何将AspectJ与Spring框架集成,以实现更灵活和可维护的代码结构。这在实际开发中是非常有用的,尤其是在处理那些需要横切关注点的场景时。
标题提到的"Spring 使用AspectJ 实现 AOP之前置通知小例子",指的是利用AspectJ在Spring中实现AOP的一种特定类型的通知——前置通知(Before advice)。前置通知在目标方法执行之前运行,但不会阻止方法的执行。这种...
本实例将深入探讨如何在Spring AOP中实现权限控制,以提高代码的可读性和可维护性。 首先,我们要理解AOP的基本概念。AOP允许程序员定义“切面”,这些切面封装了特定的关注点,比如权限检查。然后,这些切面可以在...
**Spring AOP 入门及其实例讲解** 在软件开发中,面向切面编程(Aspect Oriented Programming,简称AOP)是一种编程范式,它旨在提高代码的可重用性,减少冗余,并将关注点分离。Spring框架是Java开发中的一个流行...
1. **启用AOP代理**:在Spring配置文件中,通过`<aop:aspectj-autoproxy>`元素启用基于注解的AOP。 2. **定义切面**:创建一个带有`@Aspect`注解的类,该类可以包含通知方法。 3. **定义切点**:在切面类中,使用`...
**Spring AOP配置实例** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的核心组件之一,它提供了一种在不修改源代码的情况下,对程序进行功能增强的技术。AOP允许开发者定义“切面”,这些...
- 使用`org.springframework.aop.aspectj.annotation.AspectJProxyFactory`可以手动创建基于@AspectJ的代理。 4. **切点(Pointcut)**: - 切点是程序执行中的特定点,如方法的调用。`@Pointcut`注解用于声明切点...