<property name="interceptorNames">
<!-- 相当于包MyMethodBeforeAdvice前置通知和代理对象关联,我们
也可以把通知看出拦截器,structs2核心拦截器 -->
<!-- 多个value是数组注入,需要使用list -->
<list>
<value>MyMethodBeforeAdvice</value>
<!-- 织入后置通知 -->
<value>myAfterReturningAdvice</value></list>
</property>

name是不能瞎写的,因为在ProxyFactoryBean中调用的方法名是:

setInterceptorNames()

提一个问题

class A{

//private String name;

public void setName(String name){

System.out.println("name"+name);

}

}

beans.xml

<bean id="a" class="...A">

<property name="name" value="顺平"/>

</bean>

A a=new A();

a.setName("顺平");

不是看A中的属性,而是看beans.xml中的属性。

比如方法名为setEE(),就去设置属性eE.

①前置通知

②后置通知

③环绕通知

拦截对目标方法的调用

环绕通知,好像把真正要执行的动作包围了。

④异常通知

当目标方法抛出异常后自动调用

⑤引入通知

自定义切入点

所用beans.xml

<?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"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
">
<!-- 配置被代理的对象 -->
<bean id="test1Service" class="com.hsp.aop.Test1Service">
<property name="name" value="顺平" />
</bean> <!-- 配置前置通知 -->
<bean id="MyMethodBeforeAdvice" class="com.hsp.aop.MyMethodBeforeAdvice">
</bean> <!-- 配置后置通知 -->
<bean id="myAfterReturningAdvice" class="com.hsp.aop.MyAfterReturningAdvice" /> <!-- 配置环绕通知 -->
<bean id="myMethodInterceptor" class="com.hsp.aop.MyMethodInterceptor" /> <!-- 配置异常通知 -->
<bean id="myThrowsAdvice" class="com.hsp.aop.MyThrowsAdvice" />
<!-- 定义前置通知的切入点 -->
<bean id="myMethodBeforeAdviceFilter"
class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">
<property name="advice" ref="MyMethodBeforeAdvice" />
<property name="mappedNames">
<list>
<value>sayHello</value>
</list>
</property>
</bean>
<!-- 配置代理对象 -->
<bean id="proxyFactoryBean" class="org.springframework.aop.framework.ProxyFactoryBean"> <!-- 代理的接口集 -->
<property name="proxyInterfaces">
<list>
<value>com.hsp.aop.TestServiceInter</value>
<value>com.hsp.aop.TestServiceInter2</value>
</list>
</property>
<!-- 把通知织入到代理对象 -->
<property name="interceptorNames">
<!-- 相当于包MyMethodBeforeAdvice前置通知和代理对象关联,我们 也可以把通知看出拦截器,structs2核心拦截器 -->
<!-- 多个value是数组注入,需要使用list -->
<list>
<!-- 使用自定义切入点来控制前置通知 -->
<value>myMethodBeforeAdviceFilter</value>
<!-- 织入后置通知 -->
<value>myAfterReturningAdvice</value>
<!-- 织入环绕通知 -->
<value>myMethodInterceptor</value>
<!-- 织入异常通知 -->
<value>myThrowsAdvice</value>
</list>
</property>
<!-- 配置被代理对象,可以指定 -->
<property name="target" ref="test1Service">
</property>
</bean>
</beans>

获取的动态代理对象是不是就是bean里面引入的类型,而是动态代理对象类型。

如果它实现了接口,走的就是java jdk里的封口类型,如果没有实现接口,走的就是gc lib这种动态代理技术。

提问?spring的AOP中,当你通过代理对象去实现aop的时候,获取的ProxyFactoryBean是什么类型?

答:返回的是一个代理对象。如果目标对象实现了接口,则spring使用jdk的动态代理技术。如果目标对象没有实现接口,则spring使用CGLIB技术。

切入点运行使用正则表达式来

最新文章

  1. iOS 中的Certificate,Provisioning Profile 等在code singing中用到的信息
  2. (第九周)视频发布及git统计报告
  3. OAF_EO系列2 - Validation数据校验验证机制(概念)
  4. Shadow mapping
  5. Css攻克Selectors 一
  6. Gmail POP3设定
  7. android 手势识别学习
  8. [转python 父类可以调用子类的方法
  9. akoj-1162-计算表达式
  10. Red Hat 7.0 DNS服务配置笔记
  11. sql经典试题
  12. 老男孩Python全栈开发(92天全)视频教程 自学笔记15
  13. UBNT ex-r +netgear gs105e v2 +ap 设置vlan 步骤记录 及相关知识整理
  14. 初始redis数据库
  15. 12.scrapy框架
  16. ECSHOP /mobile/admin/edit_languages.php
  17. 错误/异常:java.net.SocketException: Unrecognized Windows Sockets error: 0: JVM_Bind;的解决方法
  18. 001.RAID简介
  19. hdu 4845 状压bfs(分层思想)
  20. python-web 创建一个输入链接生成的网站

热门文章

  1. 卸载Linux自带openjdk
  2. openwrt修改密码
  3. HDFS源码分析数据块校验之DataBlockScanner
  4. 史上最全的CSS hack方式一览(转)
  5. 使用Office 365前,企业必须要知道的10件事
  6. 对无向图的深度优先搜索(DFS)
  7. winerror.h中的内容(可以查看last error对应)
  8. POJ 2092 Grandpa is Famous【水---找出现第二多的数】
  9. Java基础 - 变量转换
  10. ElasticSearch(三十)基于scoll+bulk+索引别名实现零停机重建索引