aop

JAVA之旅-简化java开发

十年热恋 提交于 2020-01-12 23:20:05
为了降低java开发的复杂性,spring采取了以下4种关键策略 基于POJO的轻量级和最小侵入行编程     为使不让应用与框架绑死,一个bean不会实现,继承或者导入Spring API相关的任何东西,只是一个普通的java对象。   2. 通过依赖注入和面相接口实现松耦合     每个对象负责管理与自己相互协作的对象(即它所依赖对象)的引用,这将会导致高度耦合和难以测试的代码。     高度耦合的意思是一个类要管理自己的对象, public class PerformShow implements Perform{ private Star star; public PerformShow() { this.star = new SuperStar(); } }     这是典型的例子,这会使 内部对象实例可更改性很差,而且功能过于单一。 单元测试可很难做,究其原因是无法方便的取出内部对象star.     改造方法是利用依赖注入实现松耦合。分为构造器注入和setter注入两种。 public class PerformShow implements Perform{ private Star star; //constructor public PerformShow(Star star) { this.star = star; } //for setter

Spring的DI和AOP

☆樱花仙子☆ 提交于 2020-01-12 23:19:26
Spring 为了降低Java开发的复杂性,Spring采取了以下4种关键策略: * 基于POJO的轻量级和最小入侵性编程; * 通过依赖注入和面向接口实现松耦合; * 基于切面和惯例进行声明式编程; * 通过切面和模板减少样板式代码; 几乎Spring所做的任何事情都可以追溯到上面一条或者多条策略。 DI: 控制反转(Inversion of Control,英文缩写为IoC)是框架的重要特征,并非 面向对象编程 的专用术语。它与依赖注入(Dependency Injection,简称 DI )和依赖查找(Dependency Lookup)并没有关系。如设计模式中的模板方法模式就是控制反转的一种。 控制反转即IoC (Inversion of Control),它把传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现对象组件的装配和管理。所谓的"控制反转"概念就是对组件对象控制权的转移,从程序代码本身转移到了外部容器。 IoC是一个很大的概念,可以用不同的方式来实现。其主要实现方式有两种:<1>依赖查找(Dependency Lookup):容器提供回调接口和上下文环境给组件。EJB和Apache Avalon都使用这种方式。<2>依赖注入(Dependency Injection):组件不做定位查询,只提供普通的Java方法让容器去决定依赖关系

9000+ 字,彻底征服 Spring AOP ,美滋滋

可紊 提交于 2020-01-12 20:30:11
基本知识 其实, 接触了这么久的 AOP, 我感觉, AOP 给人难以理解的一个关键点是它的概念比较多, 而且坑爹的是, 这些概念经过了中文翻译后, 变得面目全非, 相同的一个术语, 在不同的翻译下, 含义总有着各种莫名其妙的差别. 鉴于此, 我在本章的开头, 着重为为大家介绍一个 Spring AOP 的各项术语的基本含义. 为了术语传达的准确性, 我在接下来的叙述中, 能使用英文术语的地方, 尽量使用英文. 什么是 AOP AOP(Aspect-Oriented Programming), 即 面向切面编程 , 它与 OOP( Object-Oriented Programming, 面向对象编程) 相辅相成, 提供了与 OOP 不同的抽象软件结构的视角. 在 OOP 中, 我们以类(class)作为我们的基本单元, 而 AOP 中的基本单元是 Aspect(切面) 术语 Aspect(切面) aspect 由 pointcount 和 advice 组成, 它既包含了横切逻辑的定义, 也包括了连接点的定义. Spring AOP就是负责实施切面的框架, 它将切面所定义的横切逻辑织入到切面所指定的连接点中. AOP的工作重心在于如何将增强织入目标对象的连接点上, 这里包含两个工作: 如何通过 pointcut 和 advice 定位到特定的 joinpoint 上 如何在

Spring aop 记录操作日志

心不动则不痛 提交于 2020-01-12 09:47:33
/** * 此为系统AOP切面的配置类 * 在spring-context.xml中引入些配置类 * @author Sai * @since 2016-11-15 */@Configuration@EnableAspectJAutoProxy(proxyTargetClass=true)//启用AspectJ自动代理@ComponentScan(basePackages = "com.bld.core.supervisor")//默认扫描与配置类相同的包下的@Component注解下的bean,想自动装配AOP切面,必需加上@Componentpublic class AopConfig { //显示装配切面的bean @Bean public UserAop userAop(){ return new UserAop(); } @Bean public SupervisorEventsAop supervisorEventsAop(){ return new SupervisorEventsAop(); } @Bean public CpsRewardCaculateAop cpsRewardCaculateAop(){ return new CpsRewardCaculateAop();}}在spring-context.xml中配置 <!-- 引入AOP切面配置类 -->

Spring AOP 详解

江枫思渺然 提交于 2020-01-12 08:23:45
  AOP作为Spring中核心部分,在Spring中扮演者重要的角色。AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处都基本相似。比如权限认证、日志、事务处理。Aop 的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。   实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。   关于动态代理和静态代理的原理,大家可以参考: http://www.cnblogs.com/yfyzy/p/4401833.html   在我们学习Spring的AOP之前,我们先来学习学习一下关于AOP的相关术语。   1.通知(Advice)   通知定义了切面是什么以及何时使用。描述了切面要完成的工作和何时需要执行这个工作,就像我们平时约会时说的时间地点一样∩_∩。   2.连接点(Joinpoint):   程序能够应用通知的一个“时机”,这些“时机”就是连接点,例如方法被调用时、异常被抛出时等等。   3.切入点(Pointcut)   通知定义了切面要发生的“故事”和时间

【一步一步学习spring】aop概述

为君一笑 提交于 2020-01-12 06:41:16
1. 啥是AOP 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 AOP采取 横向抽取机制 ,解决公共功能的重复性代码(性能监视、事务管理、安全检查、缓存) Spring AOP是使用纯java实现,不需要专门的编译过程和类加载,在运行期通过代理方式向目标类织入增强代码。 2. 为啥要AOP 举个栗子: 需求1: 要为某项save功能添加鉴权功能。 传统的开发模式: 在相关的类添加鉴权的方法,在该功能中添加调用该方法。 需求2: 客户对这个鉴权功能很满意,要求为涉及到的所有模块的save功能都加上该功能。 传统的开发模式: 如果再像上面那样在具体的实现类中重复定义鉴权方法就太傻了。那就把该方法抽取到一个base类中,相关方法都继承base类,从而做到方法的重用。 引入AOP: 采用横向抽取机制代替纵向继承。 本质上这个横向抽取就是一个代理操作。 抽取一个鉴权代理类,在代理类中增加对相关功能的鉴权操作,无需对原有的业务类进行修改。 3. AOP相关术语 JoinPoint(连接点):可以被拦截的点。在spring中,这些点指的是方法,因为spring中只支持方法类型的连接点。 Pointcut(切入点):真正被拦截的点。 Advice(通知/增强):拦截后要做的事

关于Spring AOP

China☆狼群 提交于 2020-01-12 03:54:34
一.AOP: 1.什么是AOP: 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码。 经典应用:性能监视、事务管理、安全检查、缓存等。 Spring AOP使用纯Java实现,不需要专门的编译过程和类加载器,在运行期通过代理方式向目标类织入增强代码。 AspectJ是一个基于Java语言的AOP框架,Spring2.0开始,Spring AOP引入对Aspect的支持,AspectJ扩展了Java语言,提供了一个专门的编译器,在编译时提供横向代码的织入。 2.Aop实现原理: Aop 底层采用是代理机制。 接口 + 实现类:有接口,采用JDK动态代理。 实现类:只有实现类,没有接口,采用CGLIB 字节码增强。 3.Aop相关术语 Target : 目标类,需要被增强的类。 JoinPoint:连接点,目标类上需要被增强的方法。(这些方法可以被增强,也可能不增强)。

Spring MVC 事务配置

天涯浪子 提交于 2020-01-12 03:45:48
Spring MVC事务配置 要了解事务配置的所有方法,请看一下 《Spring事务配置的5种方法 》 本文介绍两种配置方法: 一、 XML,使用tx标签配置拦截器实现事务 一、 Annotation方式 以下所使用环境为Spring4.0.3、Hibernate4.3.5 一、 XML,使用tx标签配置拦截器实现事务 Entity类User.java,持久化类,对应数据库表user package com.lei.demo.entity; import javax.persistence.*; @Entity(name="users") public class Users { public Users(){ super(); } @Id @GeneratedValue(strategy=GenerationType.AUTO) @Column(name="id") private Integer id; @Column(name="user_name",length=32) private String user_name; @Column(name="age") private Integer age; @Column(name="nice_name",length=32) private String nice_name; //属性实现...... } UserDAO

Spring框架学习(3.2)AOP返回通知、异常通知、环绕通知

隐身守侯 提交于 2020-01-11 23:36:23
前言 记录学习历程, 上一节 上一节基于xml配置文件实现了前置通知 基于XML配置文件的AOP实现 返回通知 返回通知在连接点执行完成后执行,不管是正常执行完成,还是抛出异常,都会执行返回通知中的内容 例: (1)在上一节中的日志通知类LogAdvice中添加方法: //此方法将为返回通知 public void MyAfterReturnAdvice ( JoinPoint afterjoinPoint ) { List < Object > list = Arrays . asList ( afterjoinPoint . getArgs ( ) ) ; //日志格式字符串 String logInfo = "返回通知:" + new SimpleDateFormat ( "yyyy-MM-dd HH:mm:ss" ) . format ( new Date ( ) ) + " " + list . get ( 0 ) . toString ( ) + " 浏览商品: " + list . get ( 1 ) . toString ( ) ; System . out . println ( logInfo ) ; } (2)修改xml配置文件 在< aop:aspect >元素中添加< aop:after-returning > < aop:after-returning

Spring 配置文件详解 http://www.blogjava.net/hellxoul/archive/2011/11/19/364324.html

泪湿孤枕 提交于 2020-01-11 21:40:31
1.基本配置: <?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" 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 "> <context:component-scan base-package="com.persia"> <!-- 开启组件扫描 --> </context:component-scan> <context:annotation-config> <!-