Spring(九)--通知
Spring之Advice通知
Spring原生的经典模式 实现AOP
advice :通知
前置通知:在目标方法执行之前执行!不能改变方法的执行流程和结果!
实现MethodBeforeAdvice接口!
后置通知:在目标方法执行之后执行!不能改变方法的执行流程和结果!
实现AfterReturningAdvice接口!
环绕通知:方法的拦截器!进入了方法体,能改变方法的执行流程和结果!
实现MethodInterceptor接口!
异常通知: 当我们的目标方法发生异常才会被执行!
实现ThrowsAdvice接口!
如果想在项目中使用各种通知,必须引入需要的pom文件节点!
01.aop联盟
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
02. spring整合aop的jar
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
1. 创建需要的dao接口
2. 创建需要的daoImpl实现类
3. 创建前置增强类
4. 创建后置增强类
5. 创建环绕增强类
6. 创建异常增强类和自定义异常类
7. 配置spring.xml文件
<!--01. 配置目标对象 实际肯定是配置UserServiceImpl-->
<bean id="userDaoImpl" class="com.xdf.dao.UserDaoImpl"/> <!--02.配置各种通知-->
<!--001.前置通知-->
<bean id="beforeAdvice" class="com.xdf.advice.BeforeAdvice"/>
<!--002.后置通知-->
<bean id="afterAdvice" class="com.xdf.advice.AfterAdvice"/>
<!--003.环绕通知-->
<bean id="aroundAdvice" class="com.xdf.advice.AroundAdvice"/>
<!--004.异常通知-->
<bean id="exceptionAdvice" class="com.xdf.advice.ExceptionAdvice"/> <!--03.需要配置代理工厂bean,来创建代理类! 从而把各种通知织入到目标对象的目标方法中-->
<bean id="userProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
<!--注册了目标对象-->
<property name="targetName" value="userDaoImpl"/>
<!--注册通知-->
<property name="interceptorNames">
<array>
<value>beforeAdvice</value><!--前置通知-->
<value>afterAdvice</value><!--后置通知-->
<value>aroundAdvice</value><!--环绕通知-->
</array>
</property>
</bean> <!--再次创建一个工厂 来为异常对象服务 因为一个工厂无法为多个对象服务-->
<bean id="exceptionProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
<!--注册了目标对象-->
<property name="targetName" value="userDaoImpl"/>
<!--注册通知-->
<property name="interceptorNames">
<array>
<value>exceptionAdvice</value><!--异常通知-->
</array>
</property>
</bean> </beans>
8. 创建测试类
@Test //前置通知
public void testBefore(){
ApplicationContext context=new ClassPathXmlApplicationContext("spring.xml");
/**
* 获取的是代理工厂 返回的是目标对象
*/
UserDao userDao= context.getBean("userProxy",UserDao.class);
userDao.eat();
System.out.println("***********************");
userDao.sleep(); }
@Test //后置通知
public void testAfter(){
ApplicationContext context=new ClassPathXmlApplicationContext("spring.xml");
UserDao userDao= context.getBean("userProxy",UserDao.class);
userDao.eat();
}
@Test //环绕通知
public void testAround(){
ApplicationContext context=new ClassPathXmlApplicationContext("spring.xml");
UserDao userDao= context.getBean("userProxy",UserDao.class);
String result=userDao.eat();
System.out.println(result);
}
@Test //异常通知
public void testException(){
ApplicationContext context=new ClassPathXmlApplicationContext("spring.xml");
UserDao userDao= context.getBean("exceptionProxy",UserDao.class);
try {
userDao.login("aa","admin");
}catch (MyException ex){
ex.printStackTrace();
}
}
面对以上案例 发现几个问题:
1.每个代理工厂只能给一个目标对象服务!实际开发过程中,不止一个目标对象!
2.不能实现给 指定的 主业务增强!
3.测试类getBean的时候还是获取的代理!应该是service层对象才对!
以上问题怎么解决呢?想知道的话,下次再来吧!哈哈~~(先让我们的大脑旋转起来吧!)
Spring(九)--通知的更多相关文章
- spring事件通知机制详解
优势 解耦 对同一种事件有多种处理方式 不干扰主线(main line) 起源 要讲spring的事件通知机制,就要先了解一下spring中的这些接口和抽象类: ApplicationEventPub ...
- Spring的通知类型,切入表达式写法
转载自 https://www.cnblogs.com/ltfxy/p/9882697.html Spring中通知类型: 前置通知:目标方法执行之前进行操作,可以获得切入点信息 后置通知: 目标方 ...
- Spring学习(十五)----- Spring AOP通知实例 – Advice
Spring AOP(面向方面编程)框架,用于在模块化方面的横切关注点.简单得说,它只是一个拦截器拦截一些过程,例如,当一个方法执行,Spring AOP 可以劫持一个执行的方法,在方法执行之前或之后 ...
- Spring AOP通知实例 – Advice
Spring AOP(面向方面编程)框架,用于在模块化方面的横切关注点.简单得说,它只是一个拦截器拦截一些过程,例如,当一个方法执行,Spring AOP 可以劫持一个执行的方法,在方法执行之前或之后 ...
- 关于spring.net的面向切面编程 (Aspect Oriented Programming with Spring.NET)-通知(Advice)API
本文翻译自Spring.NET官方文档Version 1.3.2. 受限于个人知识水平,有些地方翻译可能不准确,但是我还是希望我的这些微薄的努力能为他人提供帮助. 侵删. 让我们看看 Spring.N ...
- 十三 Spring的通知类型,切入表达式写法
Spring中通知类型: 前置通知:目标方法执行之前进行操作,可以获得切入点信息 后置通知: 目标方法执行之后进行操作,可以获得方法的返回值 环绕通知:在目标方法执行之前和之后进行操作,可以终止目标方 ...
- spring 九种设计模式
spring中常用的设计模式达到九种,我们举例说明: 第一种:简单工厂 又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一. 简单工厂模式的实质是由一 ...
- Spring的通知(Advice)
Spring提供了5种Advice类型: Interception Around:JointPoint前后调用 Before:JointPoint前调用 After Returning:JointPo ...
- spring添加通知配置
在项目里添加的spring配置文件 <bean id="beforeMethod" class="com.wxw.core.common.AdviceBefore& ...
- Spring切面通知执行的顺序(Advice Order)
问题描述 如果在Spring的程序中同时定义了环绕通知(Around)和前置通知(Before)..那么,有以下问题: 1.怎么让两个切面通知都起作用 2.或者让两者切面按自己指定的顺序进行执行? 3 ...
随机推荐
- json从后台接收时转化格式
后台传回的json格式为字符串格式 需要通过转化成json对象 方法一:$.get(设置type的属性为json) 方法二:设置response.setContentType("applic ...
- docker和Dockerfile
目录: 1.docker为什么会出现? 2.docker的理念 3.容器化技术 4.docker三要素 5.docker安装 6.docker帮助命令 7.Docker阿里云镜像加速器配置. 8.do ...
- java支持断点续传文件上传和下载组件
java两台服务器之间,大文件上传(续传),采用了Socket通信机制以及JavaIO流两个技术点,具体思路如下: 实现思路: 1.服:利用ServerSocket搭建服务器,开启相应端口,进行长连接 ...
- 【杂题】[AGC034F] RNG and XOR【集合幂级数】【FWT】【DP】
Description 你有一个随机数生成器,它会以一定的概率生成[0,2^N-1]中的数,每一个数的概率是由序列A给定的,Pi=Ai/sum(Ai) 现在有一个初始为0的数X,每一轮随机生成一个数v ...
- Spring Boot教程(三十二)多数据源配置与使用
之前在介绍使用JdbcTemplate和Spring-data-jpa时,都使用了单数据源.在单数据源的情况下,Spring Boot的配置非常简单,只需要在application.propertie ...
- Centos6.6 安装Mysql集群
一.环境准备 1.1系统IP设置 准备三台服务器安装Centos6.6 64位操作系统,IP地址及角色分配如下: Node IP Address ...
- R_Studio(关联)对dvdtrans.csv数据进行关联规则分析
dvdtrans.csv数据:该原始数据仅仅包含了两个字段(ID, Item) 用户ID,商品名称(共30条) #导入arules包 #install.packages("arules&qu ...
- 构建springboot的几种方式 在线构建 STS构建 Idea 内置构建 Maven 构建
SpringBoot项目的几种创建方式,启动.和访问 最常用的4种方式,但除了这些以外,还有其他方式: ①在线创建 ②STS构建 ③Intell Idea内置构建工具 ④Maven创建 STS官 ...
- Maven报错,没有有效的生命周期
[ERROR] No goals have been specified for this build. You must specify a valid lifecycle phase or a g ...
- 32位下操作mongodb心得
本文出处:http://blog.csdn.net/chaijunkun/article/details/7236911,转载请注明. 随着互联网的变革,互联网的内容生成方式也逐渐地从网站生成转为用户 ...