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

spring学习之七“AOP使用spring静态配置文件(CGLIB)”

阅读更多

一、spring对AOP的支持(在JDK动态代理和CGLIB之间的选择)

1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP
2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP
3、如果目标对象没有实现了接口,必须采用CGLIB库,
4、如果有些实现有些没有实现,spring会自动在JDK动态代理和CGLIB之间转换


如何强制使用CGLIB实现AOP?
 * 添加CGLIB库,SPRING_HOME/cglib/*.jar
 * 在spring配置文件中加入<aop:aspectj-autoproxy proxy-target-class="true"/>
 
JDK动态代理和CGLIB字节码生成的区别?
 * JDK动态代理只能对实现了接口的类生成代理,而不能针对类
 * CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法
   因为是继承,所以该类或方法最好不要声明成final 
二、原程序

  

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;

import org.aspectj.lang.JoinPoint;

public class SecurityHandler {
	
	private void checkSecurity(JoinPoint joinPoint) {
		Object[] args = joinPoint.getArgs();
		for (int i=0; i<args.length; i++) {
			System.out.println(args[i]);
		}
		
		System.out.println(joinPoint.getSignature().getName());
		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");
		UserManagerImpl userManager = (UserManagerImpl)factory.getBean("userManager");
		userManager.addUser("张三", "123");
		}
}

 

<?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">
	<!-- 
	<aop:aspectj-autoproxy proxy-target-class="true"/>
	 -->
	<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*(..))"/>
			<aop:before method="checkSecurity" pointcut-ref="allAddMethod"/>
		</aop:aspect>
	</aop:config>	
</beans>

 

分享到:
评论

相关推荐

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

    本篇文章将深入探讨如何通过Spring的静态配置文件实现AOP。我们将围绕以下几个关键知识点展开: 1. **什么是AOP**: AOP是一种编程范式,旨在减少代码重复,提高可维护性和可读性。在OOP(面向对象编程)中,我们...

    spring-boot aop

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

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

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

    cglib aop spring 动态代理

    静态代理--不适合企业开发,适合初学者理解代理。 jdk动态代理--适合企业级开发,但是它要求必须面向接口编程,假如目标类没有实现接口...spring 的AOP功能中 会根据目标类是否实现了接口来判断使用 jdk Proxy还是cglib

    spring-cglib-repack-3.2.5.jar和spring-objenesis-repack-2.6.jar

    标题中的"spring-cglib-repack-3.2.5.jar"和"spring-objenesis-repack-2.6.jar"是两个与Spring框架相关的库文件,它们主要用于Spring框架的内部实现,尤其是针对Java对象的创建和代理机制。下面将详细解释这两个库的...

    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:...

    Java Spring代理模式AOP-IOC分析

    七、使用IOC配置方式实现AOP 在Spring框架中,可以使用IOC容器来管理切面,并将其应用到目标对象上。这种方式可以使用XML配置文件或注解方式来定义切面,并将其应用到目标对象上。 八、使用XML配置Spring AOP 在...

    Spring AOP面向切面三种实现

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

    spring aop_aopalliance.jar_aspectjweaver.jar

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

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

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

    springAop默认代理方式.zip

    4. **代理模式的创建**:Spring AOP 使用`org.springframework.aop.framework.ProxyFactoryBean`或`@EnableAspectJAutoProxy`注解来配置代理。`ProxyFactoryBean`是XML配置方式,而`@EnableAspectJAutoProxy`是基于...

    spring_AOP.rar_876.aop_java aop_spring_aop

    1. Spring_AOP_DynProxy:这可能包含有关Spring动态代理的资料,Spring使用JDK动态代理或CGLIB来创建代理对象,实现AOP的功能。 2. ch20_aop_annotation:这部分内容可能是关于使用注解来定义和实现切面的教程。 3. ...

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

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

    Spring模拟aop静态代理案例

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

    java Spring代理模式AOP-IOC结合

    七、使用 XML 配置 Spring AOP 切面 Spring 提供了一个 XML 配置文件来定义 Aspect 和切面,我们可以使用 XML 文件来配置 AOP 相关的信息。 八、示例下载 我们可以下载示例代码,了解如何使用 Spring 实现 AOP 和...

    Spring cglib 中文说明

    而 Spring AOP 默认情况下使用 JDK 动态代理来代理接口,但也可以配置为使用 CGLIB 代理。 #### CGLIB 代理 API 概览 CGLIB 的基本代码量虽然不多,但由于缺乏充分的文档支持,学习起来可能会有一定难度。以下列出...

    SpringAOP简单项目实现

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

    Spring框架,AOP,Spring整合Mybatis

    5. 在Spring配置文件中声明Mapper接口,通过`@Autowired`注解注入到需要使用的地方。 6. 使用SqlSessionTemplate或Mapper接口进行数据库操作,Spring会自动处理事务。 通过这种整合,开发者可以在享受Spring的便捷...

    Spring_AOP

    Spring AOP(面向切面编程)是Spring框架中的一个重要组件,它允许开发者在不修改源代码的情况下,通过插入额外的逻辑来扩展或增强应用程序的行为。AOP的核心概念是切面(Aspect),它封装了横切关注点,如日志、...

Global site tag (gtag.js) - Google Analytics