Spring接口和类代理实例
来源:互联网 发布:软件自主开发销售收入 编辑:程序博客网 时间:2024/06/06 01:14
Spring通过接口代理毫无疑问能够提高程序代码的灵活性,接口代理的四个步骤:
①:配置被代理的目标类
②:配置通知
③:配置通知的作用切入点
④:配置接口的代理对象(Spring默认为接口代理)
配置文件:
<?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:tx="http://www.springframework.org/schema/tx" 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 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"><!-- 配置目标对象 targetObject --><bean id="targetObject" class="com.zhiwei.target.TargetObject"> <property name="name" value="name"/></bean><!-- 配置通知 --><bean id="myAdvice" class="com.zhiwei.advice.MyAdvice"/><!-- 配置通知的切入点:NameMatchMethodPointcutAdvisor:按照名称匹配切入点(RegexpMethodPointcutAdvisor可以使用正则式匹配)mappedNames:通知作用的切入点:支持ant格式的表达:sys*注意:一个通知匹配一个切入点通知器 --> <bean id="beforAdvicePacket" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor"> <property name="advice" ref="myAdvice"/> <property name="mappedNames"> <list> <value>sayHello</value> </list> </property> </bean><!-- 配置代理对象: proxyInterfaces:代理接口集:目标对象实现的接口 target:被代理目标对象 interceptorNames:拦截器名称集合 proxyTargetClass:是否开启类代理 --><bean id="proxyObject" class="org.springframework.aop.framework.ProxyFactoryBean"><property name="proxyInterfaces"> <!-- 被代理接口 --> <list> <value>com.zhiwei.target.TargetInter</value> <value>com.zhiwei.target.TargetInter01</value> </list></property><property name="target" ref="targetObject"/> <!-- 目标对象 --><property name="interceptorNames"> <!-- 目标对象注入的通知 --> <list> <value>beforAdvicePacket</value> </list></property><property name="proxyTargetClass" value="true"/></bean></beans>
目标对象:
package com.zhiwei.target;public class TargetObject implements TargetInter ,TargetInter01{ private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public void sayHello() { System.out.println("Hello "+name); } @Override public void sayBye() { System.out.println("Bye "+name); }}
目标对象实现接口:
package com.zhiwei.target;public interface TargetInter01 { public void sayBye();}
package com.zhiwei.target;public interface TargetInter { public void sayHello();}
测试类:
package com.zhiwei.target;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.zhiwei.target.TargetInter;import com.zhiwei.target.TargetInter01;import com.zhiwei.target.TargetObject;public class TestAOP { public static void main(String[] args) { ApplicationContext ac=new ClassPathXmlApplicationContext("com/zhiwei/target/applicationContext.xml"); //使用IOC容器里里面的代理对象,默认接口代理 TargetInter ti=(TargetInter) ac.getBean("proxyObject"); System.out.println("默认接口代理"); ti.sayHello(); //因为是接口代理,接口指向同一个目标对象: TargetInter01 ti01=(TargetInter01) ac.getBean("proxyObject"); TargetInter01 ti01=(TargetInter01) ti; ti01.sayBye(); //IOC配置开启类代理 TargetObject to=(TargetObject) ac.getBean("proxyObject"); System.out.println("\n\nIOC配置为类代理"); to.sayHello(); to.sayBye(); }}
结果:
0 0
- Spring接口和类代理实例
- Spring -AOP -java静态代理和动态代理实例
- 【原创】Spring-AOP代理类继承接口..
- 最简单的动态代理实例(spring基于接口代理的AOP原理)
- spring AOP 代理(代理接口)
- Spring之AOP的实现(JDK动态代理:只能代理接口,不能代理类)
- spring aop怎么给Mybaits Mapper接口的代理实现类在进行代理
- Java动态代理(JDK接口代理和Cglib类代理)
- Spring的无接口代理实现AOP
- 接口类和类实例的比较
- 抽象类和接口不能直接实例?
- 为抽象类和接口实例化
- spring aop学习6:jdk动态代理(基于接口代理)
- Spring与代理模式和实例工厂模式的整合使用
- Spring的静态代理和动态代理
- Spring-AOP: JDK代理和CGLIB代理
- Spring-AOP: JDK代理和CGLIB代理
- Spring的静态代理和动态代理
- XRecyclerView如此so easy实现下拉刷新,上拉加载,添加头布局(头布局任意加)
- 欢迎使用CSDN-markdown编辑器
- SQL在现有表中添加新字段
- 将十六进制色值转成RGB
- Spark核心操作--Transformation和Action
- Spring接口和类代理实例
- Android Studio集成极光推送
- 第16周OJ实践3 结构体--学生信息排序
- 2017年区块链技术与应用新年分享活动预告
- CentOS6安装MySQL HA架构部署(MySQL + Heartbeat + DRBD)
- 这里遇到的一个小坑-python中的二维列表
- android 应用间共享 sharedpreference
- activiti学习教程
- HTML5--表单属性