`
whp0731
  • 浏览: 174847 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

spring学习之六“AOP使用spring静态配置文件的实现”

阅读更多

一、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学习之七“AOP使用spring静态配置文件(CGLIB)”

    通过以上步骤,我们就成功地使用Spring静态配置文件结合CGLIB实现了AOP。在实际项目中,这可以帮助我们更好地管理和维护那些与核心业务逻辑无关但又必须关注的代码,提高代码的可读性和可维护性。 注意:在实际操作...

    spring-boot aop

    默认情况下,Spring使用基于Java的代理,但对于需要在静态方法或非Spring管理对象上应用AOP的情况,可能需要使用CGLIB或AspectJ字节码代理。 5. **理解代理行为**:理解Spring AOP代理的工作方式很重要,因为这可能...

    Spring_AOP_学习小结 Spring_AOP_学习小结 Spring_AOP_学习小结

    Spring AOP,即面向切面编程,是Spring框架的核心组件之一,它允许程序员在不修改原有业务代码的情况下,对程序进行功能增强。本篇文章将详细阐述Spring AOP的基本概念、种类、代理原理、通知类型以及切入点,帮助你...

    Spring AOP面向切面三种实现

    在IT行业中,Spring框架是Java企业级应用开发的首选,其强大的功能之一就是AOP(面向切面编程)。本文将详细解析Spring AOP的三种实现方式,帮助你深入理解这一重要概念。 首先,理解AOP的基本概念至关重要。AOP是...

    Spring使用AOP的三个jar包

    即使你没有直接使用AspectJ语法编写切面,Spring的AOP代理也可以利用这个库进行代理对象的创建,以实现方法调用前后的通知(advises)。这个库对于那些希望在不改变源代码的情况下,通过AOP增强已有类的行为的开发者...

    SpringAOP简单项目实现

    总结,这个"SpringAOP简单项目实现"涵盖了Spring AOP的基础知识,包括切面、通知、切入点的定义与配置,以及如何在实际项目中使用Maven进行构建和依赖管理。对于初学者来说,这是一个很好的实践案例,能够帮助他们...

    JavaEE spring自动实现AOP代理

    - 在Spring配置文件中,可以使用`&lt;aop:config&gt;`标签来定义切面,`&lt;aop:pointcut&gt;`定义切入点表达式,`&lt;aop:advisor&gt;`或`&lt;aop:aspect&gt;`定义通知(Before、After、Around等)。 - 也可以使用注解驱动的AOP,通过`@...

    Spring AOP学习资料(pdf)

    ### Spring AOP 学习资料知识点总结 #### 一、Spring AOP 概念与背景 **Spring AOP**(面向切面编程)是Spring框架中的一个重要组成部分,它通过预定义的切入点来分离关注点,使得核心业务逻辑更加清晰,同时能够...

    Spring AOP依赖jar包

    在 Spring 配置文件中,需要启用 AOP 并配置切面。以下是一个基本示例: ```xml &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:...

    Spring3.0AOP所需jar包

    Spring框架的每个主要模块都有对应的jar文件,例如spring-aop.jar,它包含了实现AOP功能的核心类和接口。 描述中的“额外jar包”可能指的是如AspectJ的库,AspectJ是一个强大的静态和动态AOP框架,可以与Spring AOP...

    Spring AOP需要的jar

    2. 在Spring配置文件中启用AOP代理。可以通过以下XML配置来实现: ```xml &lt;aop:config&gt; &lt;!-- 配置切点和通知 --&gt; &lt;/aop:config&gt; ``` 3. 定义切点(Pointcut)和通知(Advice)。切点是程序执行中的特定位置,而...

    代理设计模式:静态代理和动态代理的理解、实现与区别(优缺点)与SpringAOP的3种配置方式案例工程代码

    代理设计模式是软件开发中的一种重要模式,它允许我们在不修改原有对象的基础上,通过代理对象对原对象进行增强或控制。本资源主要涵盖了静态...通过学习和实践,你可以更好地掌握代理设计模式以及Spring AOP的使用。

    Java Spring代理模式AOP-IOC分析

    六、Spring实现AOP 在Spring框架中,可以使用AspectJ库来实现AOP。AspectJ库提供了一种注解方式来定义切面(aspect),并且可以使用Spring的IOC容器来管理切面。在Spring中,可以使用XML配置文件或注解方式来定义切...

    反射实现 AOP 动态代理模式(Spring AOP 的实现 原理) - Java 例子 -

    本文将深入探讨Spring AOP的实现原理,以及如何使用反射来实现动态代理模式。 首先,我们需要了解AOP的基本概念。AOP的核心思想是切面,它包含两个主要部分:切点(Pointcut)和通知(Advice)。切点定义了在程序...

    Spring模拟aop静态代理案例

    在Java编程领域,Spring框架是应用最广泛的IoC(Inversion of Control)和DI(Dependency Injection)容器之一,同时也提供了强大的面向切面编程(AOP)功能。本案例"Spring模拟aop静态代理案例"旨在帮助开发者深入...

    spring aop_aopalliance.jar_aspectjweaver.jar

    `aopalliance.jar`和`aspectjweaver.jar`是Spring AOP实现中两个关键的库文件,它们在Spring框架中的作用至关重要。 首先,我们来了解下`aopalliance.jar`。AOP Alliance是一个开放源代码项目,它的目标是为不同的...

    Spring aop 之 静态代理 动态代理 Aspectj aop-config 等实现方式

    主要对Spring AOP的相关概念和简单的静态代理、动态代理以及常见的几种AOP配置方式做总结学习。主要包括:1. AOP的常见概念 2. 静态代理 3. jdk动态代理 4. Aspectj and Aspectjweaver 5. **aop-config** 6. CGLIB ...

    Spring4Ioc-Aop

    - **配置形式**:通常使用XML文件来配置Bean,但在现代的Spring开发中,也广泛采用了基于注解的配置方式。 - **Bean的配置方式**: - 通过全类名进行反射创建。 - 通过工厂方法创建。 - 静态工厂方法。 - 实例...

Global site tag (gtag.js) - Google Analytics