- 浏览: 223924 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (244)
- java (23)
- java多线程 (7)
- 综合 (1)
- oracle10g (24)
- div+css (1)
- Flex (27)
- java Nio (1)
- java设计模式 (8)
- struts2 (10)
- spring3.0 (5)
- SSH (9)
- dwr (5)
- hibernate3.6 (17)
- dom4j (1)
- sql优化 (5)
- Quartz任务调度框架 (1)
- AOP (3)
- JavaScript (18)
- jquery (3)
- JSF (9)
- ruby (1)
- 正则表达式 (1)
- 明日准备 (2)
- eclipse (3)
- gvim (1)
- CMS (1)
- linux (6)
- 杂 (4)
- java 设计模式 (1)
- MySql (10)
- JBPM (4)
- JSP技术 (1)
- Mybatis And Ibatis (2)
- 经验之谈 (10)
- WebService (1)
- java分布式(高性能,高可用,可伸缩) (0)
- springMvc (2)
- redis (0)
- ant (1)
- Nutz (6)
- 配置管理 (0)
- css+div (1)
- eChars (1)
- angularJs (1)
- D3 (3)
- Scala (1)
最新评论
-
Cobain_LI:
Cobain_LI 写道学习了,之前一直都没注意到有这样的问题 ...
js面向对象3--更简单的原型模式已经带来的问题以及解决办法 -
Cobain_LI:
Cobain_LI 写道学习了,之前一直都没注意到有这样的问题 ...
js面向对象3--更简单的原型模式已经带来的问题以及解决办法 -
Cobain_LI:
有个小失误,144和147行多了两个花括号
js面向对象2--js中工厂模式的演化(重要,详细) -
Cobain_LI:
学习了,之前一直都没注意到有这样的问题
js面向对象3--更简单的原型模式已经带来的问题以及解决办法 -
YTT1121:
有网络拓扑发现的源代码么,或者您会编写么?可以有偿求购,搞科研 ...
flex 之twaver1--简单网络拓扑实现
1,在Spring配置文件中开启注解aop的基本开关。注意使用注解时一定要在spring配置文件中打开相关配置,否则aop是不起作用的。相关重要的配置都已经在配置文件中说明了。
2,strutx.xml
3,web.xml
4,Aspect切面Bean
5,Action
5,service
6,jsp页面
7,系统后台输出
在目标函数调用之前写系统日志
开始添加人员
添加人员结束
----------------------
afterReturnning增强:目标函数的返回值是:0
**********************
人物已经查询完毕
selectPerson方法已经查询完毕了,不管该方法是不是正常结束
目标方法还没有执行,开启事务
执行around方法结束
目标方法已经执行,关闭事务
<?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" xmlns:context="http://www.springframework.org/schema/context" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:lang="http://www.springframework.org/schema/lang" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd"> <!-- 为了启用spring对@AspectJ切面配置的支持,并保证Spring容器中 的目标Bean被一个或多个 切面自动增强,必须在Spring配置文件中配置如下片段--> <!-- 启动@AspectJ支持 --> <aop:aspectj-autoproxy/> <!-- 下面的bean用来自动生成目标bean的增强代理bean --> <bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator"></bean> <!-- 设置被增强的bean(也就是目标bean),及aspect切面bean所在的包名字 --> <context:component-scan base-package="com.supan.serviceimp,com.supan.aspect" > <context:include-filter type="annotation" expression="org.aspectj.lang.annotation.Aspect"/> </context:component-scan> <bean id="personAction" class="com.supan.action.PersonAction"> <property name="ps" ref="personService"></property> </bean> <bean id="personService" class="com.supan.serviceimp.PersonServiceImp"></bean> </beans>
2,strutx.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.enable.DynamicMethodInvocation" value="false" /> <constant name="struts.devMode" value="false" /> <package name="default" namespace="/" extends="json-default"> <action name="addPerson" class="personAction" method="addPerson"> <result name="success">/person/personResult.jsp</result> </action> </package> </struts>
3,web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> </web-app>
4,Aspect切面Bean
package com.supan.aspect; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; //使用@Aspect定义一个切面类 @Aspect public class LogAspect { //在目标方法调用之前写系统日志 /* * 使用before增强处理只能在目标方法执行之前植入增强,使用before * 增强处理无须理会目标方法的执行,所以before处理无法阻止目标 * 方法的执行,before增强处理执行时,目标方法还未获得执行的机会。 * 所以before增强处理无法访问目标方法的返回值。 */ @Before(value="execution(* com.supan.serviceimp.*.add*(..))") public void writeLog(){ System.out.println("在目标函数调用之前写系统日志"); } /* * AfterReturning增强处理在目标方法正常完成后被植入 * 含有两个属性pointcut/value returning * 使用returning属性还有一个额外的作用:它可用于限定切入点只匹配具有 * 对应返回值类型的方法--假如在上面的log()方法中定义rvt的形参类型是String * 则该切入点只匹配包下的返回值类型为String的所有方法。 */ @AfterReturning(pointcut="execution(* com.supan.serviceimp.*.delete*(..))",returning="rvt") public void afterReturning(Object rvt){ System.out.println("afterReturnning增强:目标函数的返回值是:" + rvt); } /* * AfterReturning增强处理只有在目标方法成功完成后才被植入 * After增强处理不管目标方法如何介乎(包括正常结束也包括异常结束)它都会被植入 */ @After(value="execution(* com.supan.serviceimp.*.select*(..))") public void after(){ System.out.println("selectPerson方法已经查询完毕了,不管该方法是不是正常结束"); } /* * Around增强处理是功能比较强大的增强处理, * Around = Before + AfterReturning */ @Around(value="execution(* com.supan.serviceimp.*.around*(..))") public void around(ProceedingJoinPoint jp) throws Throwable{ System.out.println("目标方法还没有执行,开启事务"); jp.proceed(); System.out.println("目标方法已经执行,关闭事务"); } }
5,Action
package com.supan.action; import com.opensymphony.xwork2.ActionSupport; import com.supan.service.PersonService; public class PersonAction extends ActionSupport { private PersonService ps; private String name; private int age; private String address; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public PersonService getPs() { return ps; } public void setPs(PersonService ps) { this.ps = ps; } public String addPerson(){ ps.addPerson(); System.out.println("----------------------"); ps.deletePerson(); System.out.println("**********************"); ps.selectPerson(); ps.aroundTest(); return null; } }
5,service
package com.supan.service; public interface PersonService { public void addPerson(); public int deletePerson(); public void selectPerson(); public void aroundTest(); } package com.supan.serviceimp; import org.springframework.stereotype.Component; import com.supan.service.PersonService; @Component public class PersonServiceImp implements PersonService { public void addPerson() { System.out.println("开始添加人员"); System.out.println("添加人员结束"); } public int deletePerson() { return 0; } public void selectPerson(){ System.out.println("人物已经查询完毕"); } public void aroundTest() { System.out.println("执行around方法结束"); } }
6,jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> </head> <body> <s:form action="addPerson"> <s:textfield label="姓名" name="name"></s:textfield> <s:textfield label="年龄" name="age"></s:textfield> <s:textfield label="地址" name="address"></s:textfield> <s:submit name="添加"></s:submit> </s:form> </body> </html>
7,系统后台输出
在目标函数调用之前写系统日志
开始添加人员
添加人员结束
----------------------
afterReturnning增强:目标函数的返回值是:0
**********************
人物已经查询完毕
selectPerson方法已经查询完毕了,不管该方法是不是正常结束
目标方法还没有执行,开启事务
执行around方法结束
目标方法已经执行,关闭事务
发表评论
-
项目中关于配置文件中密码的加密处理
2014-08-08 23:32 5996注:原创作品,转载请注明出处。 在项目中,为了项目 ... -
Spring创建bean的scope选择
2014-08-03 16:03 1471注:原创作品,转 ... -
java 之 jsch 实现sftp下载,上传
2014-04-02 00:18 3373package com.supan.sftp; import ... -
Struts2校验之手动校验
2014-02-25 17:13 574简单实用方法:在相应的处理逻辑方法xxx前面加上vali ... -
spring之Aop(xml配置)
2014-02-25 10:50 555基础知识: Before是在所拦截方法执行之前执行一段逻 ... -
Aspectj实现aop(静态编译增强处理)
2014-02-24 00:51 724环境准备 1,安装jdk,配置JAVA_HOME,CLASSP ... -
jsp动态include 动态include
2014-02-20 08:17 5661语法的基本形式不同:动态包含为<jsp:include ... -
hibernate 调用oracle自定义函数方法一
2014-02-12 11:33 7941,首先编写自定义函数: create or replace ... -
ssh中junit 测试 hibernate 1对多单向关联(不推荐使用这种关联)
2014-02-11 23:41 664主要介绍效率最低的一对多单向关联(实际中推荐使用一对多双向关联 ... -
ssh整合后 struts拦截器不起作用
2014-02-10 22:35 862解决方法:把拦截器配置到spring中就可以了。下面是 ... -
Struts2.2.1整合Spring3.0的两种方法
2014-01-11 19:12 555首先让spring加入到web应用中,在web应用中一般是启动 ... -
Spring的控制反转(依赖注入),及两种注入方式
2014-01-11 14:41 4901,提供构造函数来让spring实现构造注入 publ ...
相关推荐
基于注解实现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的核心概念。切面(Aspect)是关注点的模块化,这些关注点定义了跨越多个对象的...
在Spring AOP中,我们通常使用@Aspect注解来定义切面类。切面类中可以包含多个通知(Advice),包括前置通知(Before)、后置通知(After)、返回通知(After-returning)、异常通知(After-throwing)和环绕通知...
在这个场景中,我们将使用Spring AOP来实现一个日志记录的功能,以追踪系统中各个方法的调用情况,包括访问时间以及传递的参数。下面将详细阐述如何实现这一目标。 首先,我们需要了解AOP的基本概念。AOP的核心是切...
Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许程序员在不修改源代码的情况下,通过“切面”来插入额外的业务逻辑,如日志、事务管理等。AOP的引入极大地提高了代码的可复用性和可维护性。 ### 1. ...
这个"spring aop jar 包"包含了实现这一功能所需的类和接口,使得开发者能够轻松地实现面向切面的编程。 在Spring AOP中,主要涉及以下几个核心概念: 1. **切面(Aspect)**:切面是关注点的模块化,比如日志记录...
总结起来,Spring AOP注解版通过简单易懂的注解,使得面向切面编程变得更加直观和方便。它降低了横切关注点与业务逻辑之间的耦合度,提高了代码的可维护性和复用性。通过合理利用这些注解,开发者可以轻松地实现日志...
在Spring框架中,AOP(面向切面编程)是一...Spring AOP注解的应用使得切面编程更加简单直观,大大简化了对横切关注点的管理。在实际开发中,结合Spring提供的其他特性,如事务管理,可以构建出高效、健壮的后端系统。
在Spring AOP中,我们可以通过注解配置来实现切面编程,从而简化代码并提高可维护性。 首先,我们需要了解Spring AOP中的核心概念: 1. **切面(Aspect)**:切面是关注点的模块化,它包含了横切关注点(如日志)和...
Spring支持两种AOP的实现方式:Spring AspectJ注解风格和Spring XML配置风格。使用AspectJ注解风格是最常见的,它允许开发者直接在方法上使用注解来定义切面。 Spring AOP中有五种不同类型的的通知(Advice): 1....
总结一下,通过上述步骤,我们已经在Spring Boot应用中利用Spring AOP和注解方式实现了数据脱敏。这个拦截器可以在不修改原有业务代码的情况下,确保敏感信息在响应给客户端之前得到处理,提高了应用的安全性。同时...
下面我们将深入探讨Spring AOP的底层实现技术和相关知识点。 1. **代理模式** Spring AOP基于两种代理机制实现:JDK动态代理和CGLIB代理。JDK动态代理适用于实现了接口的目标对象,通过反射机制创建一个代理类来...
在 Spring 中,AOP 的实现主要依赖于代理模式,有两种代理方式:JDK 动态代理和 CGLIB 动态代理。 JDK 动态代理是基于接口的,它要求被代理的目标对象必须实现至少一个接口。Spring 使用 `java.lang.reflect.Proxy`...
Spring AOP,全称Aspect-Oriented Programming(面向切面编程),是Spring框架的一个重要模块,它通过提供声明式的方式来实现面向切面编程,从而简化了应用程序的开发和维护。在Spring AOP中,我们无需深入到每个...
**Spring AOP 学习笔记及实现Demo** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架中的一个重要组成部分,它提供了一种在不修改源代码的情况下,对程序进行功能增强的技术。AOP的主要目的...
一个简单的采用自定义注解结合SpringAop实现方法执行的权限管理,这个demo中并没有涉及到与数据库的交互和业务代码,用户权限在登陆时采用简单的手动初始化。该demo用的jdk1.7编译,Spring4.0版本,只想通过这个demo...
现在,我们回到主题——"springaop依赖的jar包"。在Spring 2.5.6版本中,使用Spring AOP通常需要以下核心jar包: - `spring-aop.jar`:这是Spring AOP的核心库,包含了AOP相关的类和接口。 - `spring-beans.jar`:...
Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许开发者在不修改源代码的情况下,通过插入切面来增强或改变程序的行为。在本教程中,我们将深入探讨Spring AOP的不同使用方法,包括定义切点、通知类型...