spring(IOC)动态代理

本文通过一个具体的例子展示了如何使用Spring的AOP功能和ProxyFactoryBean来实现对业务逻辑的增强。介绍了核心配置文件beans.xml的设置,包括引入必要的jar包、定义目标对象、通知逻辑及创建代理对象等步骤。

姓名:黄于霞      班级:软件151

1.引入Spring IOC的核心jar包,创建IOC的配置文件beans.xml,内容如下:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
 4     xsi:schemaLocation="http://www.springframework.org/schema/beans
 5         http://www.springframework.org/schema/beans/spring-beans.xsd">
 6     <!-- 被代理的目标对象 -->
 7     <bean id="target" class="com.zhangguo.Spring041.aop06.Math"></bean>
 8     <!--通知、横切逻辑-->
 9     <bean id="advice" class="com.zhangguo.Spring041.aop06.AfterAdvice"></bean>
10     <!--代理对象 -->
11     <!--interceptorNames 通知数组 -->
12     <!--p:target-ref 被代理的对象-->
13     <!--p:proxyTargetClass 被代理对象是否为一个类,如果是则使用cglib,否则使用jdk动态代理  -->
14     <bean id="proxy" class="org.springframework.aop.framework.ProxyFactoryBean"
15         p:interceptorNames="advice"
16         p:target-ref="target"
17         p:proxyTargetClass="true"></bean>
18 </beans>
获得代理类的实例并测试运行
 1 package com.zhangguo.Spring041.aop06;
 2 
 3 import org.springframework.context.ApplicationContext;
 4 import org.springframework.context.support.ClassPathXmlApplicationContext;
 5 
 6 public class Test {
 7 
 8     @org.junit.Test
 9     public void test01()
10     {
11         //容器
12         ApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");
13         //从代理工厂中获得代理对象
14         IMath math=(IMath)ctx.getBean("proxy");
15         int n1=100,n2=5;
16         math.add(n1, n2);
17         math.sub(n1, n2);
18         math.mut(n1, n2);
19         math.div(n1, n2);
20     }
21 }

2.总结:

       从容器中获得proxy对象时应该是org.springframework.aop.framework.ProxyFactoryBean类型的对象(如下代码所示),但这里直接就转换成IMath类型了,这是因为:ProxyFactoryBean本质上是一个用来生产Proxy的FactoryBean。如果容器中的某个对象持有某个FactoryBean的引用它取得的不是FactoryBean本身而是 FactoryBean的getObject()方法所返回的对象。所以如果容器中某个对象依赖于ProxyFactoryBean那么它将会使用到 ProxyFactoryBean的getObject()方法所返回的代理对象这就是ProxyFactryBean得以在容器中使用的原因。




转载于:https://www.cnblogs.com/hyxz/p/7080493.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值