aop

使用Spring进行面向切面编程(AOP)

女生的网名这么多〃 提交于 2020-03-17 08:36:43
本文转载自: 使用Spring进行面向切面编程(AOP) 前言 面向切面编程(AOP)提供另外一种角度来思考程序结构,通过这种方式弥补了面向对象编程(OOP)的不足。 除了类(classes)以外,AOP提供了 切面。切面对关注点进行模块化,例如横切多个类型和对象的事务管理。 (这些关注点术语通常称作 横切(crosscutting) 关注点。) Spring的一个关键的组件就是 AOP框架。 尽管如此,Spring IoC容器并不依赖于AOP,这意味着你可以自由选择是否使用AOP,AOP提供强大的中间件解决方案,这使得Spring IoC容器更加完善。 Spring 2.0 AOP Spring 2.0 引入了一种更加简单并且更强大的方式来自定义切面,用户可以选择使用基于模式(schema-based)的方式或者使用@AspectJ注解。 这两种风格都完全支持通知(Advice)类型和AspectJ的切入点语言,虽然实际上仍然使用Spring AOP进行织入(Weaving)。 本章主要讨论Spring 2.0对基于模式和基于@AspectJ的AOP支持。请查阅"AOP声明风格的选择"一节获取 为你的应用选择适当的声明风格的建议。Spring 2.0完全保留了对Spring 1.2的向下兼容性,下一章 将讨论 Spring 1.2 API所提供的底层的AOP支持。

Spring学习(九)--Spring的AOP

限于喜欢 提交于 2020-03-17 07:04:00
1、配置ProxyFactoryBean Spring IOC容器中创建Spring AOP的方法。 (1)配置ProxyFactoryBean的Advisor通知器 通知器实现定义了对目标对象进行增强的切面行为,即Advice通知。 (2)定义ProxyFactoryBean类 设定实现AOP的重要属性,如proxyInterface、interceptorNames、target等。 interceptorNames:需要定义的通知器,通知器在proxyFactoryBean的配置下,通过代理对象起到拦截器的作用。 (3)定义target属性 通过target注入的bean,是需要通过AOP切面增强的对象。 2、ProxyFactoryBean生成的AOPproxy对象 具体实现需要通过动态代理特性。 AOPproxy对象生成流程: (1)以FactoryBean的getObject()为入口开始,通过getObject方法调用inITIallizeAdvisorChain()方法。 (2)通过inITIallizeAdvisorChain方法初始化advisor链,初始化时提供一个标志位,确定是否初始化。如果未曾初始化过,通过ProxyFactoryBean获取代理对象之后完成初始化,初始化后读取配置中的通知器,通过getbean(name)方法获取通知器。 3

SpringAOP(转)

こ雲淡風輕ζ 提交于 2020-03-16 18:49:35
转https://www.baidu.com/link?url=gO7UsA_Q5oAGHPW8WiI5D-GtM-DLNEj2hJ1BMEI5SQBLLaxpDaInOUNtGup4Qx_CKB2GCEq_7IgsJiyhExCGRa&wd=&eqid=a8637b870032f6ac000000035d706ed1 1.什么是SpringAOP 什么是aop:Aspect Oriented Programming的缩写,面向切面编程,通过预编译和动态代理实现程序功能的 统一维护的一种技术 主要功能:日志记录,性能统计,安全控制,事务处理,异常处理等 2.SpringAOP框架的用途 提供了声明的企业服务,特别是EJB的替代服务的声明 允许用户控制自己的方面,以完成OOP和AOP的互补使用 OOP:模拟真实的世界,一切皆是对象 3.AOP的实现方式 下边这两种Spring都是支持的 3.1预编译 -AspectJ 完整的面向切面编程解决方案--》spring不是完整的解决方案,不过spring提供比较好的实现方式,当然spring是同时也是支持这种方式的,这也是一种常用的方式 3.2运行期间动态代理(JDK动态代理,CGLib动态代理) -SpringAop,JbossAop Spring的AOP使用纯java实现,无需特殊的编译过程,不需要控制类的加载器层次

AOP在日常项目场景使用(一)

大憨熊 提交于 2020-03-16 17:24:55
某厂面试归来,发现自己落伍了!>>> 直接上代码吧: /** *Aop运用:记录接口调用日志 * @author 咸蛋超人 */ @Component @Aspect @Slf4j public class ActApiLogAop { //实际项目路径 @Around("execution(* com.demo.rest.*.*(..)))") public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable { StringBuilder name = null; //Spring计时器:Stopwatch可方便的对程序部分代码进行计时(ms级别),适用于同步单线程代码块。 Stopwatch stopwatch = Stopwatch.createStarted(); try { name = new StringBuilder(pjp.getTarget().getClass().getSimpleName()).append(":").append(pjp.getSignature().getName()); Object o = pjp.proceed(); return o; } catch (Throwable throwable) { log.error("接口:" + name +

Spring面试题

假如想象 提交于 2020-03-16 09:16:59
69道Spring面试题和答案 原文地址 译者:深海(1422207401@qq.com) 校对:方腾飞 目录 Spring 概述 依赖注入 Spring beans Spring注解 Spring数据访问 Spring面向切面编程(AOP) Spring MVC Spring 概述 1. 什么是spring? Spring 是个java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。Spring 框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型促进良好的编程习惯。 2. 使用Spring框架的好处是什么? 轻量: Spring 是轻量的,基本的版本大约2MB。 控制反转: Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。 面向切面的编程(AOP): Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。 容器: Spring 包含并管理应用中对象的生命周期和配置。 MVC框架 :Spring的WEB框架是个精心设计的框架,是Web框架的一个很好的替代品。 事务管理: Spring 提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务(JTA)。 异常处理: Spring 提供方便的API把具体技术相关的异常(比如由JDBC

spring面试题

梦想的初衷 提交于 2020-03-16 08:41:43
1.选择使用Spring框架的原因? 使用Spring: 第一是使用它的IOC功能,在解耦上达到了配置级别。 第二是使用它对数据库访问事务相关的封装。 第三就是各种其他组件与Spring的融合,在Spring中更加方便快捷的继承其他一些组件。 2.Spring 是如何管理事务的? spring的事务声明有两种方式,编程式和声明式。spring主要是通过“声明式事务”的方式对事务进行管理,即在配置文件中进行声明,通过AOP将事务切面切入程序,最大的好处是大大减少了代码量。 3.Spring IoC容器配置Bean的方式? 答: 基于XML文件进行配置。 基于注解进行配置。 基于Java程序进行配置(Spring 3+) 4.Bean 是如何被管理的? 在Spring框架中,一旦把一个bean纳入到Spring IoC容器之中,这个bean的生命周期就会交由容器进行管理,一般担当管理者角色的是BeanFactory或ApplicationContext。认识一下Bean的生命周期活动,对更好的利用它有很大的帮助。 概括来说主要有四个阶段:实例化,初始化,使用,销毁。 5.阐述Spring框架中Bean的生命周期? ApplicationContext容器中,Bean的生命周期流程如上图所示,流程大致如下: 1.首先容器启动后

Spring AOP原理分析

谁都会走 提交于 2020-03-14 10:03:42
AOP基础概念 目标类(Target) 代理(Proxy) 连接点(Joinpoint) 切点(Pointcut) 通知(Advice):增加的功能 切面(Aspect):切点 + 通知 织入(Weaving):增强目标类的方法 引入(Introduction):增加新方法、属性 Spring AOP使用方式 1 、基于代理的 AOP <!-- 切面=通知+切点 --> <bean id="myAdvisor" class="org.springframework.aop.support.DefaultPointcutAdvisor"> <property name="advice" ref="myAdvice"/> <property name="pointcut" ref="myPointcut"/> </bean> <!-- 定义代理对象 --> <bean id="aopProxy" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="target" ref="targetObject"/> <property name="interceptorNames" value="myAdvisor"/> </bean> 2 、纯简单 Java 对象切面 public class

如何理解Spring AOP

回眸只為那壹抹淺笑 提交于 2020-03-13 03:32:52
什么是AOP?   AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能。日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。这种散布在各处的无关的代码被称为横切(cross-cutting)代码,在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。 而AOP技术则恰恰相反,它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即方面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。 来源: https://www.cnblogs.com/ktao/p/7684058.html

IOC DI AOP Interception

社会主义新天地 提交于 2020-03-13 03:25:53
今天早上Team内部培训Enterprise Library 中的Unity, 还介绍了IOC & DI & Interception, 下面把这些概念做个梳理. XXContainer 无论是Spring.Net还是EntLib(Enterprise Library的简称)都有一个叫做Container的东西, Spring.Net对应的接口是 IApplicationContext, Unity中的叫做IUnityContainer, 主要做对象的Mapping 任务. IOC IOC直译过来是”控制反转”,这句话应该理解为什么地方的控制被反转了?控制的是什么? 这里的控制指的应该是对象的实例化位置由程序内部的硬编码移动到了程序外部, 实例化的位置做了反向控制. OjbectA a = new Objecta(); 应用了IOC之后就变成了: IObjectA a = Container.Resolve(“OjbectA”) as IObjectA; 可见这里元被直接new的对象,现在交给了Container来做, 让后根据Container中的Mapping 来决定用哪个实现来初始化. DI “依赖注入”的三种注入方法分别是Constructor Injection,Method Injection, Property Injection. 他是针对面向对象”依赖倒置(DIP

IOC和AOP使用拓展

杀马特。学长 韩版系。学妹 提交于 2020-03-13 02:04:55
多种方式实现依赖注入 构造注入 编写测试类 public class UserServiceImpl implements UserService { // 声明接口类型的引用,和具体实现类解耦合 private UserDao dao; // 无参构造 public UserServiceImpl() { } // 用于为dao属性赋值的构造方法 public UserServiceImpl(UserDao dao) { this.dao = dao; } public void addNewUser(User user) { // 调用用户DAO的方法保存用户信息 dao.save(user); } } 在使用设值注入时,Spring通过JavaBean无参构造方法实例化对象,当我们编写带参构造方法后,java虚拟机不会再提供默认的无参构造方法,为了保证使用的灵活性,建议自行添加一个无参构造方法 配置文件代码如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www