aop

Spring核心技术之Ioc和AOP

烂漫一生 提交于 2020-03-10 07:52:08
一、Spring应用环境的配置: 1. 在classpath中添加以下包: 1) SPRING_HOME/dist/spring.jar、 2) SPRING_HOME/lib/jakarta-commons/commons-logging.jar 3) SPRING_HOME/lib/log4j/log4j-1.2.xx.jar 2.在classpath中添加Spring的配置文件:applicationContext.xml 在SPRING_HOME/samples/jpetstore/war/WEB-INF目录下有样板文件。 二、IoC容器: 1. IoC概念:反向控制、控制反转。对象不需要主动去查找依赖类的实例。而是由其它应用给它注入。 DI:依赖注入。 2. Spring对IoC的支持:Spring 提供了BeanFactory和ApplicationContext这两种IoC容器,来帮助你管理Bean、Bean之间的依赖关系以及Bean的生命周期。 三、Spring中IoC: 1. Bean装配:在Spring配置文件中用<bean>标记来装配一个Bean. <bean id="Bean在Spring容器中的唯一标识" class="Bean类的全限定名">...</bean> 2. 用setter方法注入它的依赖类: 1)

Spring AOP的一个使用例子

爱⌒轻易说出口 提交于 2020-03-09 21:50:03
0.前言 学习Spring,肯定会了解IOC和AOP的思想,除了Spring的基本使用,自己在实际应用中,还真没特意使用过AOP的功能。最近有一个项目使用到了Spring,由于之前也没有Spring的实际工作经验,加上项目比较着急,所以有很多细节不完善的地方。下面介绍AOP使用的一个例子,有不对或者更好的解决方法,欢迎指正。 1.功能需求 项目是一个学习小组,用户可以创建小组,加入小组,离开小组,以及其它一系列功能。在小组首页里有一个小组动态。这就需要我们在程序中,处理用户基本操作以外,还要保存相应的小组动态。 2.基本实现 首先想到的就是写一个公共的方法,在需要的地方进行调用。因为里面有两个DAO操作,所以封装成了一个service方法。在不同的service中注入service调用这个方法。这个方法大概需要几个参数,记录小组id,用户id,以及动态的type public void addTeamNewsLog(long team_id,long user_id,int type){ long ref = studyTeamInfoDAO.getSeqAllRef(); StudyTeamNews news =new StudyTeamNews(); news.setRef(new BigDecimal(ref)); news.setTeamId(new BigDecimal

【进展】为netVinace项目加入AOP日志功能(基于Spring 3.0)

给你一囗甜甜゛ 提交于 2020-03-09 21:48:16
今日,为自己的开源项目加入日志模块,完成写日志功能,主要获取应用在执行过程中一系列调用的类,方法信息。该日志功能利用Spring 3 基于AspectJ 注解完成。 下面是日志切面类的代码(关键留意注解 @Aspect, @Before @After) 方法名可以自定义,但方法一定要带JoinPoint jp 这个参数,否则,无法获取执行类信息 @Aspect public class LogDelegater implements ServiceUtil { //自己实现的日志类,封装自己想要的日志格式,实现读写日志功能 private SystemLogger logger=new SystemLoggerImpl(); public LogDelegater() { // TODO Auto-generated constructor stub System.out.println("******loggerDelegate*******"+SystemLogger.getLogFile().getAbsolutePath()); } @Before("execution(* *.*(..))") public void doBefore(JoinPoint jp){ String log_msg=jp.toLongString();//获取目标对象方法执行信息 /

Spring框架学习——AOP的开发

时光怂恿深爱的人放手 提交于 2020-03-09 20:40:56
一.AOP开发中的相关术语。   ——JoinPoint(连接点): 指那些可以被拦截到的点。比如增删改查方法都可以增强,这些方法就可以被称为是连接点。   ——PointCut: 切入点,真正被拦截的点,指对哪些连接点进行拦截的定义。JoinPoint是指方法可以增强,而切入点就是实际哪个方法进行增强或修改,这样的方法被称为切入点。    ——Advice(增强/通知): 方法层面的增强。指拦截到了方法后需要做的事情,也就是增强的功能部分被称为通知。分为前置(方法主体之前)、后置、环绕通知。     ——Introduction(引介):是一种特殊的通知,再不修改类代码的前提下进行类层面的增强。   ——Target:代理的目标对象,在AOP中也可以说是被增强的对象,如对UserDao增强,那么UserDao就是目标对象。   ——Weaving(织入):指将通知(Advice)应用到目标(Target)的过程。 也就是将增强应用到目标对象来创建新的代理对象的过程。Spring采用动态织入的方式。   ——Proxy(代理):一个类被AOP织入增强后,就产生一个结果代理类。   ——Aspect(切面):是多个切入点和多个通知(引介)的结合。在代理中可能有切面。 二、Spring使用AspectJ进行AOP开发( XML方式 )   A.创建动态web项目,引入jar包。    

Spring AOP

非 Y 不嫁゛ 提交于 2020-03-09 17:51:35
Spring AOP 手动配置通知类 前置通知 import java.lang.reflect.Method; import org.springframework.aop.BeforeAdvice; public class GreetingBeforAdvice implements MethodBeforeAdvice { @Override public void before(Method method,Object []params,Object obj) throws Throwable{ String name=String.valueOf(params[0]); System.out.println("###前置通知:参数," + name ); } } 后置通知 import java.lang.reflect.Method; import org.springframework.aop.AfterReturningAdvice; public class GreetingAfterAdvice implements AfterReturningAdvice { @Override public void afterReturning(Object obj, Method method, Object[] params,Object arg3) throws

AOP 和 前置通知,后置通知

本小妞迷上赌 提交于 2020-03-09 17:50:42
Spring 1、AOP:中文名称面向切面编程 2、英文名称:(Aspect Oriented Programming) 3、正常程序执行流程都是纵向执行流程   3.1 又叫面向切面编程,在原有纵向执行流程中添加横切面   3.2 不需要修改原有程序代码     3.2.1 高扩展性     3.2.2 原有功能相当于释放了部分逻辑,让职责更加明确 4、面向切面编程是什么??   4.1 在程序原有纵向流程中,针对某一个或某一些方法添加 通知,形成横切面过程,就叫做面向切面编程。 5、常用概念   5.1 原有功能:切点,pointcut   5.2 前置通知:在切点之前执行的功能 before advice   5.3 后置通知:在切点之后执行的功能 after advice   5.4 如果切点执行过程中出现异常,会触发异常通知 throws advice   5.5 所有功能总称叫做切面   5.6 织入:把切面嵌入到原有功能的过程叫做织入 6、spring提供了2种AOP实现方式   6.1 Schema-based :     6.1 每个通知都需要实现接口或类     6.2 配置spring配置文件时 在<aop:config>配置   6.2 Aspectj     6.2.1 每个通知不需要实现接口或类     6.2.2 配置spring配置文件是在<aop

Spring第五章:AOP(Schema-based)

Deadly 提交于 2020-03-09 17:50:30
AOP 链接:https://pan.baidu.com/s/1qS-AaZHSLUwxYSjc9PHDYA 提取码:np2q   1.AOP: 中文名称面向切面编程   2. 英文名称 :(Aspect Oriented Programming)   3. 正常程序执行流程都是纵向执行流程     3.1 又叫面向切面编程 , 在原有纵向执行流程中添加横切面     3.2 不需要修改原有程序代码       3.2.1 高扩展性       3.2.2 原有功能相当于释放了部分逻辑 . 让职责更加明确 .          4. 面向切面编程是什么 ?     4.1 在程序原有纵向执行流程中 , 针对某一个或某一些方法添加通 知 , 形成横切面过程就叫做面向切面编程 .   5. 常用概念     5.1 原有功能 : 切点 , pointcut     5.2 前置通知 : 在切点之前执行的功能 . before advice     5.3 后置通知 : 在切点之后执行的功能 ,after advice     5.4 如果切点执行过程中出现异常 , 会触发异常通知 .throws advice     5.5 所有功能总称叫做切面 .     5.6 织入 : 把切面嵌入到原有功能的过程叫做织入   6.spring 提供了 3 种 AOP 实现方式     6.1

【AOP】基于@Aspect的AOP配置

早过忘川 提交于 2020-03-09 17:44:26
基于spring cloud的aop配置 1,启动类MemberAppliaction增加注解 @Import({SwaggerConfiguraion.class, WebMvcAutoConfiguration.class}) @SpringBootApplication @FFanApplication @EnableFFanApiDoc @EnableAspectJAutoProxy(proxyTargetClass = true, exposeProxy=true) //启动aspect的aop注解 @EnableAutoConfiguration @EnableTransactionManagement @EnableDiscoveryClient @ComponentScan(basePackages = {"cn.wanda.sail.member"}) @MapperScan(basePackages = {"cn.wanda.sail.member.mapper"}) @EnableFeignClients(basePackages = {"cn.wanda.sail.member.client"}) public class MemberApplication { 2,定义切面类 @Aspect @Component public class

对AOP切面的一些整理与理解

三世轮回 提交于 2020-03-09 17:41:49
首先上一张AOP的图示 一:几个重要的概念 1> 切面:横切关注点(跨越应用程序多个模块的功能)被模块化的特殊对象[验证切面。日志切面] 2> 通知:切面中的每个方法 3> 目标:被通知的方法(业务逻辑中的方法) 4> 代理(proxy):向目标对象应用通知之后创建的对象 5> 连接点:程序运行前的某个特定位置(详细的物理存在):如某个方法调用前,调用后,方法抛出异常后等。 连接点由两个信息确定:方法表示的程序运行点相对点表示的方位。 6> 切点:每一个类会有多个连接点(看不到摸不到,非详细物理存在)[通过切点能够定位到非常多个连接点]即:连接点是程序类中客观存在的事务。 AOP通过切点定位到特定的链接点。 类比:连接点相当于数据库中的记录,切点相当于查询条件。切点和连接点不是一一相应的关系,一个切点匹配多个连接点。切点通过接口进行描写叙述。使用类和方法作为连接点的查询条件。 二:Spring AOP 1)增加jar包 2)在配置文件里增加aop的命名空间(namespace),完整命名空间例如以下: <?xml version="1.0" encoding="GB18030"? > <beans xmlns=" http://www.springframework.org/schema/beans " xmlns:xsi=" http://www.w3.org/2001

Spring Boot AOP记录用户操作日志

浪子不回头ぞ 提交于 2020-03-09 16:11:11
在Spring框架中,使用AOP配合自定义注解可以方便的实现用户操作的监控。首先搭建一个基本的Spring Boot Web环境 开启Spring Boot ,然后 引入必要依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!-- aop依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <!-- mysql驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.41</version> </dependency> <!-- druid数据源驱动 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter<