`

spring 配置文件实现AOP-学习笔记

阅读更多

 

Spring 对AOP的支持I:

Aspect默认情况下不用实现接口,但对于目标对象,在默认的情况下必须实现接口 如果没有实现接口必须引入CGLIB库,我们可以通过Advice中添加一个JointPoint参数,这个值会由spring自动传入,从JointPoint中可以取得参数值,方法名等等。

Spring对AOP的支持II:

1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP。

2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP。

3、如果目标对象没有实现接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间转换

在实现接口的情况下, 如果强制使用CGLIB实现AOP?

添加CGLIB库,SPRING_HOME/cglib/*.jar

在spring配置文件中添加<aop:aspectj-autoproxy proxy-target-class="true"/>

JDK动态代理实和CGLIB字节码生成的区别?

JDK动态代理只能对实现了接口的类生成代理,而不能针对普通类。

CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法因为是继承,所以该类或方法最好不要声明成final

 

 

 

<?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:context="http://www.springframework.org/schema/context"
	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/context 
			http://www.springframework.org/schema/context/spring-context-2.5.xsd
			http://www.springframework.org/schema/aop 
			http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
	
	<!-- 
		打开配置项,这个配置项是对@Aspectj这个注解进行支持 注解本身是不能干活的,注解之所以能干活是因为后面有处理器对其进行处理
		这个配置相当于我们将要使用的@Aspectj注解提供了解析的功能
	 -->
	<aop:aspectj-autoproxy />
	<context:component-scan base-package="com.sample.*"/>
	<bean id="apectBean" class="com.sample.service.MyInterceptor2"/>
	<aop:config>
		<aop:aspect id="asp" ref="apectBean">
			<aop:pointcut id="mycut" expression="execution (void com.sample.service.impl.PersonServiceBean*.*(String))"/>
			<aop:before pointcut-ref="mycut" method="doAccessCheck" arg-names="name" />
			<aop:after pointcut-ref="mycut" method="doAfter"/>
			<aop:after-returning pointcut-ref="mycut" method="doAfterReturning"/>
			<aop:after-throwing pointcut-ref="mycut" method="doAfterThrowing"/>
			<aop:around pointcut-ref="mycut" method="doBasicProfiling"/>
		</aop:aspect>
	</aop:config>
	
	<aop:config>
		<aop:aspect id="myAOP" ref="check">
			<aop:pointcut id="target" expression="execution(* com.sample.service.Common.execute2(..))"/>
			<aop:before method="checkValidator" pointcut-ref="target"/>
			<aop:after method="addLog" pointcut-ref="target"/>
		</aop:aspect>
	</aop:config>
</beans>

 

 package com.sample.service;
import org.springframework.stereotype.Service;
@Service("common")
public class Common {
	public void execute(String userName, String password) {
		System.out.println("------------------普通类----------------");
	}
	
	public void execute2(Stock stock) {
		System.out.println("------------------普通类----------------");
	}
}

 

package com.sample.service;
import org.aspectj.lang.JoinPoint;
import org.springframework.stereotype.Service;

@Service("check")
public class Check {
	public void checkValidator() {
		System.out.println("------------------验证合法性----------------");
	}
	public void addLog(JoinPoint jp) {
		System.out.println("------------------添加日志----------------");
		Object[] objs = jp.getArgs();
		for (Object o : objs) {
			Stock stock = (Stock)o;
			System.out.println(stock.getLId());
		}
		
		System.out.println("========checkSecurity=="+jp.getSignature().getName());//这个是获得方法名
	}
}
 

 

分享到:
评论

相关推荐

    Spring学习笔记(16)----使用Spring配置文件实现AOP

    在本篇Spring学习笔记中,我们将深入探讨如何利用Spring配置文件来实现面向切面编程(AOP)。面向切面编程是Spring框架的核心特性之一,它允许我们把关注点分离,将横切关注点(如日志、事务管理、权限控制等)与...

    spring ioc aop mvc boot-学习笔记.docx

    Spring Boot支持两种类型的配置文件,`application.properties`和`application.yml`。YAML语法具有良好的可读性,支持键值对、数据对象和数组等结构。例如,可以通过`@ConfigurationProperties`注解将配置文件中的...

    SpringAop学习笔记以及实现Demo

    **Spring AOP 学习笔记及实现Demo** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架中的一个重要组成部分,它提供了一种在不修改源代码的情况下,对程序进行功能增强的技术。AOP的主要目的...

    Spring学习笔记(15)----使用Spring的注解方式实现AOP

    在本篇Spring学习笔记中,我们将深入探讨如何利用Spring框架的注解方式来实现面向切面编程(AOP)。AOP是一种编程范式,它允许我们定义横切关注点,如日志、事务管理等,然后将这些关注点模块化并插入到应用程序的多...

    JSF2整合Spring3------JSF学习笔记4

    **JSF2整合Spring3——JSF学习笔记4** 在Java服务器端开发中,JavaServer Faces(JSF)和Spring框架都是重要的技术。JSF是一个用于构建用户界面的MVC(Model-View-Controller)框架,而Spring则是一个全面的企业级...

    Spring - 学习笔记

    例如,在XML配置文件中,我们可以定义`&lt;bean&gt;`标签来声明和配置对象,然后通过`id`或`name`属性为对象设置唯一的标识,`class`属性指定对象的全限定类名,`init-method`和`destroy-method`分别用于指定对象初始化和...

    springboot学习思维笔记.xmind

    springboot学习笔记 spring基础 Spring概述 Spring的简史 xml配置 注解配置 java配置 Spring概述 Spring的模块 核心容器CoreContainer Spring-Core Spring-Beans ...

    七、Spring-笔记

    Spring 框架还提供了 AOP(Aspect-Oriented Programming)机制,可以帮助我们实现面向方面的编程。 AOP 机制可以帮助我们实现日志记录、安全检查、事务管理等功能。 Spring 框架是一个功能强大且灵活的项目管理...

    Spring学习笔记(精华全记录)

    ### Spring学习笔记(精华全记录) #### Spring框架概述 Spring框架源自Rod Johnson的个人项目,最初于2002年末发布。Spring并非一开始就作为一个完整的框架出现,而是从一个项目逐步发展而来。随着项目的成熟,...

    学习Spring笔记_AOP_Annotation实现和XML实现

    在Spring的配置文件中,我们可以创建`&lt;aop:config&gt;`和`&lt;aop:aspect&gt;`元素来定义切面。`&lt;aop:pointcut&gt;`用于定义切点,而`&lt;aop:before&gt;`, `&lt;aop:after&gt;`, 等则用于定义通知。 以下是一个XML配置的例子: ```xml ...

    Spring的学习笔记

    以下将详细介绍Spring学习笔记中的主要知识点。 **面向抽象编程** 面向抽象编程是一种设计原则,强调在代码中使用接口或抽象类,而不是具体实现类。这使得系统更具有灵活性,易于扩展和维护。在Spring框架中,我们...

    Spring-Kapcb:Spring学习

    记录自己关于Spring的学习笔记还有Demo ,笔记均在Demo注释部分,后续会整理成MarkDown格式的文件发布在博客上。 如果觉得对您有帮助,您的Start就是对我最大的认同。 欢迎互相学习交流,如果项目中有问题的部分可以...

    Spring框架学习笔记

    在Spring中,应用程序的组件被称为Bean,这些Bean被定义在配置文件中,由Spring容器管理其生命周期,包括实例化、初始化、装配和销毁。Bean可以通过XML、注解或者Java配置来定义。 五、Spring MVC Spring MVC是...

    Java企业级信息系统开发学习笔记

    第1篇 Java企业开发学习笔记(1.1)采用Spring配置文件管理Bean,介绍了如何使用Spring配置文件管理Bean,包括创建Maven项目、添加Spring依赖、创建Spring配置文件、创建Bean等步骤。 第2篇 Java企业开发学习笔记...

    Spring IOC和AOP代码与笔记整理

    实际操作中,我们可以使用注解来声明切面,例如`@Aspect`、`@Before`、`@After`等,也可以使用XML配置文件来定义切面。同时,Spring还提供了基于注解的事务管理,使得事务处理更加便捷。 **三、实战示例** 为了更...

    Spring学习笔记&源码

    本资料“Spring学习笔记&源码”是基于网易云课堂黑马程序员的Spring四天精通课程,旨在帮助学习者深入理解和实践Spring框架。 笔记部分可能会涵盖以下内容: 1. **Spring概述**:介绍Spring框架的历史、特点和主要...

    Spring学习笔记-cqupt

    在本篇 Spring 学习笔记中,我们将探讨 Spring 的入门、优点、组成以及重要的IOC理论。 1. **Spring 简介** Spring 是一个开源的、免费的 Java 框架,它的目标是减少企业级开发的复杂性。它集成了许多现有的技术,...

    Spring技术内幕 学习笔记

    在学习笔记中,可能会详细讲解如何使用@Autowired、@Qualifier等注解进行依赖注入,以及如何通过XML配置文件或Java配置类来声明依赖关系。 其次,Spring的IoC(Inversion of Control)容器是其核心组件,它负责管理...

    spring学习笔记

    ### Spring学习笔记知识点详解 #### 一、Spring框架概述 **Spring** 是一个开源的、分层的企业级应用开发框架,旨在简化Java EE应用程序的开发。它的主要目标是提高开发效率,减少耦合度,并提供一种更为简洁的...

    Spring学习总结笔记

    以上就是Spring学习笔记的初步概述,涵盖了Spring的基本架构、配置文件的创建和加载,以及依赖注入的主要方式。随着学习的深入,还可以涉及AOP、Spring MVC、Spring Boot、Spring Data等更高级的主题,从而更好地...

Global site tag (gtag.js) - Google Analytics