切面

Java Web-Spring框架(二)

你说的曾经没有我的故事 提交于 2020-01-19 00:07:39
1、后处理 bean 对一个bean生效 2、注解和xml混合使用 a、将所有的 bean 都配置在 xml 中,<bean id="" class="" b、将所有的依赖都使用注解,@Autowired,默认不生效。为了生效,需要在xml中配置:<context:annotation-config,如图: 上图中,两个注解一般不一起使用,“注解1”扫描含有注解(@Component等)类,注入注解也会自动生效。“注解2”只在xml和注解(注入)混合使用时,使注入注解生效。 3、AOP 3.1、AOP介绍 AOP(Aspect Oriented Programming),面向切面编程。通过预编译方式和运动期动态代理实现程序功能的统一维护的一种技术。是OOP(面向对象编程)的延续,采取 横向抽取 机制,取代了传统 纵向继承 体系重复性代码。如图: 经典应用:事务管理、性能监视、安全检查、缓存、日志等。 Spring AOP使用纯Java实现,不需要专门的编译过程和类加载器,在运行期通过代理方式向目标类织入增强代码。 AOP实现原理 AOP底层将采用代理机制进行实现。 接口 + 实现类:spring采用 jdk的 动态代理 Proxy 实现类:spring采用 cglib字节码增强 AOP术语【掌握】 target:目标类,需要被代理的类。例如:UserService

Java框架之Spring02-AOP-动态代理-AspectJ-JdbcTemplate-事务

拈花ヽ惹草 提交于 2020-01-18 13:41:04
AOP 动态代理   代理设计模式的原理: 使用一个代理将原本对象包装起来 ,然后用该代理对象”取代”原始对象。任何对原始对象的调用都要通过代理。代理对象决定是否以及何时将方法调用转到原始对象上。 代理模式的三要素: 代理主题接口 代理者 被代理者 代理模式的主要优点 代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用; 代理对象可以扩展目标对象的功能; 代理模式能将客户端与目标对象分离,在一定程度上降低了系统的耦合度; 其主要缺点 在客户端和目标对象之间增加一个代理对象,会造成请求处理速度变慢; 增加了系统的复杂度; 动态代理的方式    静态代理类只能替一个主题接口进行代理工作 基于接口实现动态代理: JDK动态代理 基于继承实现动态代理: Cglib、Javassist动态代理 JDK动态代理步骤: * 1、编写主题接口 * 2、编写被代理类 * 3、编写代理工作处理器:即代理类要替被代理类做什么事情(有参构造器) * 要求:必须实现InvocationHandler,重写 * Object invoke(Object proxy, Method method, Object[] args) * 第一个参数:代理类对象 * 第二个参数:被代理类和代理类 要执行的方法 * 第三个参数:要执行方法的实参列表 * 这个invoke方法不是程序员调用

Spring aop学习整理(spring in action)(一):了解AOP

时间秒杀一切 提交于 2020-01-18 13:37:47
  切面能帮助我们模块化横切关注点。简而言之,横切关注点可以被描述为影响应用多处的功能。例如,安全就是一个横切关注点,应用中的许多方法都会涉及到安全规则。图4.1直观呈现了横切关注点的概念。      图4.1展现了一个被划分为模块的典型应用。每个模块的核心功能都是为特定业务领域提供服务,但是这些模块都需要类似的辅助功能,例如安全和事务管理。如果要重用通用功能的话,最常见的面向对象技术是继承(inheritance)或委托(delegation)。但是,如果在整个应用中都使用相同的基类,继承往往会导致一个脆弱的对象体系;而使用委托可能需要对委托对象进行复杂的调用。切面提供了取代继承和委托的另一种可选方案,而且在很多场景下更清晰简洁。在使用面向切面编程时,我们仍然在一个地方定义通用功能,但是可以通过声明的方式定义这个功能要以何种方式在何处应用,而无需修改受影响的类。横切关注点可以被模块化为特殊的类,这些类被称为切面(aspect)。这样做有两个好处:首先,现在每个关注点都集中于一个地方,而不是分散到多处代码中;其次,服务模块更简洁,因为它们只包含主要关注点(或核心功能)的代码,而次要关注点的代码被转移到切面中了。   AOP术语:   与大多数技术一样,AOP已经形成了自己的术语。描述切面的常用术语有通知(advice)、切点(pointcut)和连接点(join point)。图4

Spring

若如初见. 提交于 2020-01-18 04:31:22
什么是Spring Spring是一个开发源代码的设计层面的框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。 Spring的特点 方便解耦,简化开发 通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。有了Spring,用户不必再为单实例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。 AOP编程的支持 通过Spring提供的AOP功能,方便进行面向切面的编程, 许多不容易用传统OOP实现的功能可以通过AOP轻松应付。 声明式事务的支持 在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来, 通过声明式方式灵活地进行事务的管理,提高开发效率和质量。 方便集成各种优秀框架 Spring不排斥各种优秀的开源框架,相反,Spring可以降低各种框架的使用难度,Spring提供了对各种优秀框架(如Struts,Hibernate、Hessian、Quartz)等的直接支持。 降低Java EE API的使用难度 Spring对很多难用的Java EE API(如JDBC,JavaMail,远程调用等) 提供了一个薄薄的封装层,通过Spring的简易封装,这些Java EE API的使用难度大为降低。 Java 源码是经典学习范例

面向切面编程二

徘徊边缘 提交于 2020-01-18 03:22:43
上一篇是对一个具体的类切面编程实现,现在将其抽象出来,利用java的动态代理特性实现切面编程。类图如下 定义了Before和After泛型接口,DynamicProxy类实现切面编程功能,继承自InvocationHandler接口。 Before接口 public interface Before<T> { public boolean before(T...args); } BeforeDivide实现Before接口 public class BeforeDivide implements Before{ //除法参数的验证 @Override public boolean before(Object... args) { if((Integer)args[1]==0) return false; else return true; } } After接口 public interface After<T> { public void after(T...args); } AfterDivide实现After接口 public class AfterDivide implements After{ //输出结果 @Override public void after(Object... args) { System.out.println("结果是:"+args[0]); }

Spring Day03 AOP

只愿长相守 提交于 2020-01-18 02:10:10
1.Spring 的 AOP 简介 1.1 什么是 AOP AOP 为 Aspect Oriented Programming 的缩写,意思为面向切面编程,是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 AOP 是 OOP 的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 1.2 AOP 的作用及其优势 作用:在程序运行期间,在不修改源码的情况下对方法进行功能增强 优势:减少重复代码,提高开发效率,并且便于维护 1.3 AOP 的底层实现 实际上,AOP 的底层是通过 Spring 提供的的动态代理技术实现的。在运行期间,Spring通过动态代理技术动态的生成代理对象,代理对象方法执行时进行增强功能的介入,在去调用目标对象的方法,从而完成功能的增强。 1.4 AOP 的动态代理技术 常用的动态代理技术 JDK 代理 : 基于接口的动态代理技术 cglib 代理:基于父类的动态代理技术 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GID0L2KN-1578710358957)(img\图片1.png)] 1.5 JDK 的动态代理 ①目标类接口 public

spring总结-----Spring AOP

纵饮孤独 提交于 2020-01-18 00:59:18
什么是AOP aop(Aspect-Oriented Programming), 即 面向切面编程 , 它与 OOP( Object-Oriented Programming, 面向对象编程) 相辅相成, 提供了与 OOP 不同的抽象软件结构的视角. 在 OOP 中, 我们以类(class)作为我们的基本单元, 而 AOP 中的基本单元是 Aspect(切面) 术语 Aspect(切面) aspect 由 point cut 和 advice 组成,它既包含了横切逻辑的定义, 也包括了连接点(join point )的定义. Spring AOP就是负责实施切面的框架, 它将切面所定义的横切逻辑织入到切面所指定的连接点中. AOP的工作重心在于如何将增 强( advice )织入目标对象Target的连接点上, 这里包含两个工作: 如何通过 pointcut 和 advice 定位到特定的 joinpoint 上 如何在 advice 中编写切面代码. 可以简单地认为, 使用 @Aspect 注解的类就是切面, 满足 pointcut 规则的 joinpoint 会被添加相应的 advice 操作. advice(增强) 由 aspect 添加到特定的 join point(即满足 point cut 规则的 join point) 的一段代码. 许多 AOP框架, 包括

Spring中的Aop的理解

自作多情 提交于 2020-01-17 05:20:24
也是闲来无事,所有从头再把Spring 实战通读一下。 1.介绍面向切面编程的原理。 2.通过POJO创建切面。 3.使用注解@AspectJ。 4为切面注入依赖。 下面主要围绕上面这四点开始介绍 首先,切面能帮助我们做什么? 专业一点就是可以帮助我们模块化横切关注点。【 横切关注点 】描述为影响应用多处的功能。(安全,事务,其他,等) 划分多个模块,每个模块的核心都需要为特定的业务领域提供服务,但是这些模块也都需要类似的辅助功能。 想要重用这些功能的话,常见的就是面向对象的继承(inheritance)和委托(delegation)。 切面提供了取代继承和委托的另一种可选方案。 在使用面向切面编程时,我们还是在一个地方定义通用的功能,但是可以通过声明的方式定义这个功能要以何种方式在何处应用。 而无需修改受影响的类。横切关注点可以模块化为一个特殊的类,这些类又被称为 切面(aspect) [ 这样做的好处就是,现在的每个关注点都集中在了一个地方。而不是分散到多处代码中。降低了耦合,再者就是简洁,它们这些类只包含关注点的代码,二次要的关注点代码被转移到了切面中。 ] Aop 相关术语 通知(Advice)定义了切面是什么以及什么时候使用。   前置通知(Before):在目标方法被调用之前调用通知功能   后置通知(After):在目标方法完成之后调用通知

Spring Framework--AOP(1)--

蹲街弑〆低调 提交于 2020-01-15 04:25:09
一、简介 AOP(Aspect-Oriented Programming,即面向切面程序设计),提供了另外一种有关程序结构的思维方式,是OOP(面向对象程序设计)的补充。 OOP的模块化单元是类,AOP的模块化单元是切面。切面可以模块化横切多个类或者对象的关注点,比如事务管理,这些关注点在AOP的词汇里,我们称之为横切关注点(crosscutting concerns). Spring的AOP框架是Spring最重要的组件之一,虽然Spring的Ioc不依赖于AOP(这意味着你如果不需要AOP你可以不用它),但是AOP是Ioc的补充,它们一起可以提供强大的中间件解决方案。 Spring框架使用AOP可以: (1)提供声明式的企业服务,作为EJB声明式企业服务的替代方案。其中最重要的一个服务就是声明式事务管理。 (2)作为OOP的重要补充,允许用户实现自定义的切面。 1、AOP相关概念 首先来认识AOP中的一些核心概念和术语,这些术语并不是特定于Spring框架的。AOP的这些术语不是很直观,比较不好理解。 (1)Aspect(切面):对横切多个类的关注点的模块化,事务管理是个很好的例子。在Spring AOP中,切面是通过常规的类(基于schema的方式)或者带有@Aspect注解的常规类(@AspectJ方式)来实现的。 (2)Join point(连接点):程序执行中的一个点

Spring面试,IoC和AOP的理解

删除回忆录丶 提交于 2020-01-14 11:14:05
spring 的优点? 1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦 2.可以使用容易提供的众多服务,如事务管理,消息服务等 3.容器提供单例模式支持 4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能 5.容器提供了众多的辅助类,能加快应用的开发 6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等 7.spring属于低侵入式设计,代码的污染极低 8.独立于各种应用服务器 9.spring的DI机制降低了业务对象替换的复杂性 10.Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可以自由选择spring的部分或全部 什么是DI机制? 依赖注入(Dependecy Injection)和控制反转(Inversion of Control)是同一个概念,具体的讲:当某个角色需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在spring中创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring来完成,然后注入调用者 因此也称为依赖注入。 spring以动态灵活的方式来管理对象 , 注入的两种方式,设置注入和构造注入。 设置注入的优点:直观,自然 构造注入的优点:可以在构造器中决定依赖关系的顺序。 什么是AOP?