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学习笔记中,我们将深入探讨如何利用Spring配置文件来实现面向切面编程(AOP)。面向切面编程是Spring框架的核心特性之一,它允许我们把关注点分离,将横切关注点(如日志、事务管理、权限控制等)与...
Spring Boot支持两种类型的配置文件,`application.properties`和`application.yml`。YAML语法具有良好的可读性,支持键值对、数据对象和数组等结构。例如,可以通过`@ConfigurationProperties`注解将配置文件中的...
**Spring AOP 学习笔记及实现Demo** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架中的一个重要组成部分,它提供了一种在不修改源代码的情况下,对程序进行功能增强的技术。AOP的主要目的...
在本篇Spring学习笔记中,我们将深入探讨如何利用Spring框架的注解方式来实现面向切面编程(AOP)。AOP是一种编程范式,它允许我们定义横切关注点,如日志、事务管理等,然后将这些关注点模块化并插入到应用程序的多...
**JSF2整合Spring3——JSF学习笔记4** 在Java服务器端开发中,JavaServer Faces(JSF)和Spring框架都是重要的技术。JSF是一个用于构建用户界面的MVC(Model-View-Controller)框架,而Spring则是一个全面的企业级...
例如,在XML配置文件中,我们可以定义`<bean>`标签来声明和配置对象,然后通过`id`或`name`属性为对象设置唯一的标识,`class`属性指定对象的全限定类名,`init-method`和`destroy-method`分别用于指定对象初始化和...
springboot学习笔记 spring基础 Spring概述 Spring的简史 xml配置 注解配置 java配置 Spring概述 Spring的模块 核心容器CoreContainer Spring-Core Spring-Beans ...
Spring 框架还提供了 AOP(Aspect-Oriented Programming)机制,可以帮助我们实现面向方面的编程。 AOP 机制可以帮助我们实现日志记录、安全检查、事务管理等功能。 Spring 框架是一个功能强大且灵活的项目管理...
### Spring学习笔记(精华全记录) #### Spring框架概述 Spring框架源自Rod Johnson的个人项目,最初于2002年末发布。Spring并非一开始就作为一个完整的框架出现,而是从一个项目逐步发展而来。随着项目的成熟,...
在Spring的配置文件中,我们可以创建`<aop:config>`和`<aop:aspect>`元素来定义切面。`<aop:pointcut>`用于定义切点,而`<aop:before>`, `<aop:after>`, 等则用于定义通知。 以下是一个XML配置的例子: ```xml ...
以下将详细介绍Spring学习笔记中的主要知识点。 **面向抽象编程** 面向抽象编程是一种设计原则,强调在代码中使用接口或抽象类,而不是具体实现类。这使得系统更具有灵活性,易于扩展和维护。在Spring框架中,我们...
记录自己关于Spring的学习笔记还有Demo ,笔记均在Demo注释部分,后续会整理成MarkDown格式的文件发布在博客上。 如果觉得对您有帮助,您的Start就是对我最大的认同。 欢迎互相学习交流,如果项目中有问题的部分可以...
在Spring中,应用程序的组件被称为Bean,这些Bean被定义在配置文件中,由Spring容器管理其生命周期,包括实例化、初始化、装配和销毁。Bean可以通过XML、注解或者Java配置来定义。 五、Spring MVC Spring MVC是...
第1篇 Java企业开发学习笔记(1.1)采用Spring配置文件管理Bean,介绍了如何使用Spring配置文件管理Bean,包括创建Maven项目、添加Spring依赖、创建Spring配置文件、创建Bean等步骤。 第2篇 Java企业开发学习笔记...
实际操作中,我们可以使用注解来声明切面,例如`@Aspect`、`@Before`、`@After`等,也可以使用XML配置文件来定义切面。同时,Spring还提供了基于注解的事务管理,使得事务处理更加便捷。 **三、实战示例** 为了更...
本资料“Spring学习笔记&源码”是基于网易云课堂黑马程序员的Spring四天精通课程,旨在帮助学习者深入理解和实践Spring框架。 笔记部分可能会涵盖以下内容: 1. **Spring概述**:介绍Spring框架的历史、特点和主要...
在本篇 Spring 学习笔记中,我们将探讨 Spring 的入门、优点、组成以及重要的IOC理论。 1. **Spring 简介** Spring 是一个开源的、免费的 Java 框架,它的目标是减少企业级开发的复杂性。它集成了许多现有的技术,...
在学习笔记中,可能会详细讲解如何使用@Autowired、@Qualifier等注解进行依赖注入,以及如何通过XML配置文件或Java配置类来声明依赖关系。 其次,Spring的IoC(Inversion of Control)容器是其核心组件,它负责管理...
### Spring学习笔记知识点详解 #### 一、Spring框架概述 **Spring** 是一个开源的、分层的企业级应用开发框架,旨在简化Java EE应用程序的开发。它的主要目标是提高开发效率,减少耦合度,并提供一种更为简洁的...
以上就是Spring学习笔记的初步概述,涵盖了Spring的基本架构、配置文件的创建和加载,以及依赖注入的主要方式。随着学习的深入,还可以涉及AOP、Spring MVC、Spring Boot、Spring Data等更高级的主题,从而更好地...