- 浏览: 174847 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
yinvent:
谢谢,终于找到一个可以用的例子!
struts2学习之一简单范例 -
锅巴49:
学习了,不错.
使用 Spring 2.5 注释驱动的 IoC 功能 -
fooky:
你好,今天在配置spring secutiry3,想让系统先从 ...
spring security 配置文件小结(逐步深化到url级别) -
lj508:
你好啊 请教你个问题
我用那个纯jsp上传时
怎么运行时根本没 ...
Sturt2学习之十二---文件上传 -
641216927:
我还是一个struts2新手。
有个问题请教一下:
同时在t ...
struts2学习之一简单范例
一、spring(采用配置文件的方式)对AOP实现
1、spring依赖库
* SPRING_HOME/dist/spring.jar
* SPRING_HOME/lib/jakarta-commons/commons-logging.jar
* SPRING_HOME/lib/log4j/log4j-1.2.14.jar
* SPRING_HOME/lib/aspectj/*.jar
2、配置如下
<aop:config>
<aop:aspect id="security" ref="securityHandler">
<aop:pointcut id="allAddMethod" expression="execution(* com.bjsxt.spring.UserManagerImpl.add*(..))"/>
<aop:before method="checkSecurity" pointcut-ref="allAddMethod"/>
</aop:aspect>
</aop:config>
3、spring对AOP的支持
Aspect默认情况下不用实现接口,但对于目标对象(UserManagerImpl.java),在默认情况下必须实现接口(因为sping在底层也是通过java的动态代理来实现)
如果没有实现接口必须引入CGLIB库。会用另一种实现方式,即他在编译时,把你需要在某些方法前需要加的所有检查等全加进去了。
二、源程序示例
package com.bjsxt.spring; public interface UserManager { public void addUser(String username, String password); public void deleteUser(int id); public void modifyUser(int id, String username, String password); public String findUserById(int id); }
package com.bjsxt.spring; public class UserManagerImpl implements UserManager { public void addUser(String username, String password) { System.out.println("-------UserManagerImpl.addUser()----------"); } public void deleteUser(int id) { System.out.println("-------UserManagerImpl.deleteUser()----------"); } public String findUserById(int id) { System.out.println("-------UserManagerImpl.findUserById()----------"); return null; } public void modifyUser(int id, String username, String password) { System.out.println("-------UserManagerImpl.modifyUser()----------"); } }
package com.bjsxt.spring; public class SecurityHandler { private void checkSecurity() { System.out.println("----------checkSecurity()---------------"); } }
package com.bjsxt.spring; import org.springframework.beans.factory.BeanFactory; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Client { public static void main(String[] args) { BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml"); UserManager userManager = (UserManager)factory.getBean("userManager"); userManager.addUser("张三", "123"); userManager.deleteUser(1); } }
<?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:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> <bean id="securityHandler" class="com.bjsxt.spring.SecurityHandler"/> <bean id="userManager" class="com.bjsxt.spring.UserManagerImpl"/> <aop:config> <aop:aspect id="security" ref="securityHandler"><!--此处声明了切面类--> <aop:pointcut id="allAddMethod" expression="execution(* com.bjsxt.spring.UserManagerImpl.add*(..))"/> <!--上面这一句声明了在哪些方法使用时拦截,称作pointcut--> <aop:before method="checkSecurity" pointcut-ref="allAddMethod"/> <!--上面这一句声明了在那些方法使用前拦截,还是方法使用后拦截,称作before Advice或者叫after Advice--> </aop:aspect> </aop:config> </beans>
三、在以上示例程序中通过Advice中添加一个JoinPoint参数
可参考附件程序(spring_aop3.rar )
我们可以通过Advice中添加一个JoinPoint参数,这个值会由spring自动传入,从JoinPoint中可以取得
参数值、方法名等等
package com.bjsxt.spring;
import org.aspectj.lang.JoinPoint;
public class SecurityHandler {
private void checkSecurity(JoinPoint joinPoint) {
System.out.println("----------checkSecurity()---------------");
}
}
备注:因为例三中的UserManagerImpl 没有通过一个接口UserManager去实现,所以不能轻而易举地产生动态代理了,不过还好在spring中有一个叫cglib的jar包(* SPRING_HOME/lib/cglib/*.jar),引用这个jar包后,并在切面类
加入一个参数(joinPoint)即可达到和例二一样的效果了!
- spring_aop2.rar (6.9 KB)
- 下载次数: 10
- spring_aop3.rar (7.1 KB)
- 下载次数: 11
发表评论
-
使用 Spring 2.5 注释驱动的 IoC 功能
2010-08-04 11:04 1239级别: 初级 转自http://www.ibm.com/dev ... -
使用 Spring 2.5 基于注解驱动的 Spring MVC
2010-08-04 11:00 1126转自http://www.ibm.com/developerw ... -
spring security 学习 续一
2009-08-21 15:08 5098六、为了使用MD5对密码加密,我们需要修改一下配置文件。 ... -
spring security 配置文件小结(逐步深化到url级别)
2009-08-20 17:39 9177一 、方式一:用户名密码都在配置文件中。 <?x ... -
spring2.5+strut2.0+hibernate3.3集成
2009-08-15 16:15 1261一、准备jar包,见附件。 二、分布集成 1、先集成spr ... -
ssh或S2sh中因延迟加载出现问题解决方案
2009-08-15 15:29 1057解决方案:在web.xml中加入以下代码 使用spr ... -
S2SH或ssh中乱码问题解决方法一
2009-08-15 15:23 1111在web.xml中添加以下配置 <filter> ... -
Spring+JDBC集成学习笔记(可参考ppt附件38-46页)
2009-08-15 14:25 1912使用Spring+JDBC集成步骤如下 ... -
spring小结之配置二级缓存!
2009-08-15 13:36 1833一、spring二级缓存主要分为三步,可以参考附件程序理解: ... -
Spring和Struts和Hibernate集成
2009-03-31 11:53 7911、见附件 由于附件最大不超过10M 所以部分lib单独打包了 ... -
spring与struts集成方案二
2009-03-31 11:31 1084spring+struts的集成(第二种集成方案)一、原理 将 ... -
Spring与Struts集成_第一种方案摘录
2009-03-30 13:38 1048一、原理: 在Action中取得BeanFactory对象,然 ... -
Spring学习笔记之九--声明式事务
2009-03-30 10:02 1018一、事务的传播特性: 前六个是标准的,在.net中也有,后面 ... -
spring学习之八--Hibernate编程式事务
2009-03-30 00:06 1580采用编程式事务 程序示例: 1、以前单个事物的控制 1)Hib ... -
spring学习之七“AOP使用spring静态配置文件(CGLIB)”
2009-03-29 16:21 2879一、spring对AOP的支持(在JDK动态代理和CGLIB之 ... -
spring学习之五“AOP概念及使用Annotation的实现”
2009-03-27 15:14 1049一、静态代理 参见代码 二、动态代理 参 ... -
spring学习之四“自动装配”
2009-03-27 14:46 909一。根据名字自动装配: 前提一、设置default-auto ... -
Spring学习笔记之三“scope” --bean范围
2009-03-27 14:37 1524三、spring Bean的作用域: scope可以取值: ... -
Spring学习笔记之二“属性注入”
2009-03-27 14:15 975参见附件代码理解下文(附件中有更加详细的注解)一、普通的属性注 ... -
Spring学习笔记之一“why spring”
2009-03-27 09:54 911一、spring概述 2、在使用spring前 ...
相关推荐
通过以上步骤,我们就成功地使用Spring静态配置文件结合CGLIB实现了AOP。在实际项目中,这可以帮助我们更好地管理和维护那些与核心业务逻辑无关但又必须关注的代码,提高代码的可读性和可维护性。 注意:在实际操作...
默认情况下,Spring使用基于Java的代理,但对于需要在静态方法或非Spring管理对象上应用AOP的情况,可能需要使用CGLIB或AspectJ字节码代理。 5. **理解代理行为**:理解Spring AOP代理的工作方式很重要,因为这可能...
Spring AOP,即面向切面编程,是Spring框架的核心组件之一,它允许程序员在不修改原有业务代码的情况下,对程序进行功能增强。本篇文章将详细阐述Spring AOP的基本概念、种类、代理原理、通知类型以及切入点,帮助你...
在IT行业中,Spring框架是Java企业级应用开发的首选,其强大的功能之一就是AOP(面向切面编程)。本文将详细解析Spring AOP的三种实现方式,帮助你深入理解这一重要概念。 首先,理解AOP的基本概念至关重要。AOP是...
即使你没有直接使用AspectJ语法编写切面,Spring的AOP代理也可以利用这个库进行代理对象的创建,以实现方法调用前后的通知(advises)。这个库对于那些希望在不改变源代码的情况下,通过AOP增强已有类的行为的开发者...
总结,这个"SpringAOP简单项目实现"涵盖了Spring AOP的基础知识,包括切面、通知、切入点的定义与配置,以及如何在实际项目中使用Maven进行构建和依赖管理。对于初学者来说,这是一个很好的实践案例,能够帮助他们...
- 在Spring配置文件中,可以使用`<aop:config>`标签来定义切面,`<aop:pointcut>`定义切入点表达式,`<aop:advisor>`或`<aop:aspect>`定义通知(Before、After、Around等)。 - 也可以使用注解驱动的AOP,通过`@...
### Spring AOP 学习资料知识点总结 #### 一、Spring AOP 概念与背景 **Spring AOP**(面向切面编程)是Spring框架中的一个重要组成部分,它通过预定义的切入点来分离关注点,使得核心业务逻辑更加清晰,同时能够...
在 Spring 配置文件中,需要启用 AOP 并配置切面。以下是一个基本示例: ```xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:...
Spring框架的每个主要模块都有对应的jar文件,例如spring-aop.jar,它包含了实现AOP功能的核心类和接口。 描述中的“额外jar包”可能指的是如AspectJ的库,AspectJ是一个强大的静态和动态AOP框架,可以与Spring AOP...
2. 在Spring配置文件中启用AOP代理。可以通过以下XML配置来实现: ```xml <aop:config> <!-- 配置切点和通知 --> </aop:config> ``` 3. 定义切点(Pointcut)和通知(Advice)。切点是程序执行中的特定位置,而...
代理设计模式是软件开发中的一种重要模式,它允许我们在不修改原有对象的基础上,通过代理对象对原对象进行增强或控制。本资源主要涵盖了静态...通过学习和实践,你可以更好地掌握代理设计模式以及Spring AOP的使用。
六、Spring实现AOP 在Spring框架中,可以使用AspectJ库来实现AOP。AspectJ库提供了一种注解方式来定义切面(aspect),并且可以使用Spring的IOC容器来管理切面。在Spring中,可以使用XML配置文件或注解方式来定义切...
本文将深入探讨Spring AOP的实现原理,以及如何使用反射来实现动态代理模式。 首先,我们需要了解AOP的基本概念。AOP的核心思想是切面,它包含两个主要部分:切点(Pointcut)和通知(Advice)。切点定义了在程序...
在Java编程领域,Spring框架是应用最广泛的IoC(Inversion of Control)和DI(Dependency Injection)容器之一,同时也提供了强大的面向切面编程(AOP)功能。本案例"Spring模拟aop静态代理案例"旨在帮助开发者深入...
`aopalliance.jar`和`aspectjweaver.jar`是Spring AOP实现中两个关键的库文件,它们在Spring框架中的作用至关重要。 首先,我们来了解下`aopalliance.jar`。AOP Alliance是一个开放源代码项目,它的目标是为不同的...
主要对Spring AOP的相关概念和简单的静态代理、动态代理以及常见的几种AOP配置方式做总结学习。主要包括:1. AOP的常见概念 2. 静态代理 3. jdk动态代理 4. Aspectj and Aspectjweaver 5. **aop-config** 6. CGLIB ...
- **配置形式**:通常使用XML文件来配置Bean,但在现代的Spring开发中,也广泛采用了基于注解的配置方式。 - **Bean的配置方式**: - 通过全类名进行反射创建。 - 通过工厂方法创建。 - 静态工厂方法。 - 实例...