Spring温故知新(九)Spring自动代理 (系列第一部分完结篇)

这是《Spring温故知新》系列的第一部基础部分的最后一篇,简单的介绍一下Spring的自动代理。

我一直都用机器人打招呼这个小应用来做举例,可能大家感觉用了前一篇的CGLIB代理以后就已经是非常方便了。但是事实上如果是真正大型的企业应用来说这还远远不够方便。

不管是动态代理还是CGLIB代理,它们在使用之前都必须先给每个Action建立相应的代理bean。小应用可能还看不出区别,但是一旦Action的熟练达到几十个甚至几百上千个的时候,这个工作量就要令人崩溃了。

Spring的自动代理就是为了解决这个问题而存在的。那么我们用一个简单的例子来学习怎么样实现动态代理,看完你就会觉得非常简单。

依然先是WallE类,没有任何变化:
package com.iteye.bolide74.action;

public class WallE {
public String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public void say(String msg) {
System.out.println("到达邻居家,对邻居说:" + msg + ",我是" + this.name);
}

public void clean() {
System.out.println("开始进行垃圾回收程序");
}
}


然后是GetGift和GiveGift类,也跟前一篇一样没有变化:
package com.iteye.bolide74.action;

import java.lang.reflect.Method;

import org.springframework.aop.MethodBeforeAdvice;

public class GetGift implements MethodBeforeAdvice {

@Override
public void before(Method arg0, Object[] arg1, Object arg2)
throws Throwable {
System.out.println("获取了一个礼物!");
}
}

package com.iteye.bolide74.action;

import java.lang.reflect.Method;

import org.springframework.aop.AfterReturningAdvice;

public class GiveGift implements AfterReturningAdvice {

@Override
public void afterReturning(Object arg0, Method arg1, Object[] arg2,
Object arg3) throws Throwable {
System.out.println("赠予了一个礼物!");
}

}


最后就是最关键的config.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- 这个就是自动代理的关键,加入这个bean就代表了开启自动代理 -->
<bean id="autoProxyCreator"
class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" />

<bean id="wallE" class="com.iteye.bolide74.action.WallE">
<property name="name" value="Wall-E" />
</bean>
<bean id="getGift" class="com.iteye.bolide74.action.GetGift" />
<bean id="giveGift" class="com.iteye.bolide74.action.GiveGift" />

<!-- 这里还是老样子,配置两个Advisor -->
<bean id="getGiftAdvisor"
class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<property name="advice">
<ref bean="getGift" />
</property>
<property name="patterns">
<list>
<value>.*say.*</value>
</list>
</property>
</bean>
<bean id="giveGiftAdvisor"
class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<property name="advice">
<ref bean="giveGift" />
</property>
<property name="patterns">
<list>
<value>.*say.*</value>
</list>
</property>
</bean>
<!-- 大家可以注意到,原先实现ProxyFactoryBean的代理bean已经没有了,只需要以上的Adivsor就可以 -->
</beans>


应用代码:
package com.iteye.bolide74.tester;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.iteye.bolide74.action.WallE;

public class GiftBySpringTester {
public static void main(String[] args) {
ApplicationContext actx = new ClassPathXmlApplicationContext(
"config.xml");
//注意:这里的getBean是wallE这个bean了,因为已经没有了代理bean
WallE wallE = (WallE) actx.getBean("wallE");
wallE.say("你好,Spring自动代理向你问候");
System.out.println();
wallE.clean();
}
}



运行结果:
[quote]获取了一个礼物!
到达邻居家,对邻居说:你好,Spring自动代理向你问候,我是Wall-E
赠予了一个礼物!

开始进行垃圾回收程序[/quote]


大家可以看到这就是最终使用了CGLIB代理和自动代理的机器人打招呼送礼物应用,我们可以对比一下最前面没有使用Spring框架时的代码,我们会发现除了在应用代码中可以看到Spring的痕迹以外,几乎都和平时写的普通代码没区别,这就是Spring的一大特点,低耦合!


那么这一系列的第一部分,Spring基础知识已经基本上介绍完毕了,接下来我将会开始介绍Spring用的最多的实战部分:Spring MVC;最后我们会以Struts+Spring+Hibernate实现一个web功能来结束《Spring温故知新》系列。


上一篇:Spring温故知新(八)静态切入点和CGLIB代理,更智能、更方便![url]http://bolide74.iteye.com/blog/1048078[/url]
6/2025 MP4 出版 |视频: h264, 1280x720 |音频:AAC,44.1 KHz,2 Ch 语言:英语 |持续时间:12h 3m |大小: 4.5 GB 通过实际 NLP 项目学习文本预处理、矢量化、神经网络、CNN、RNN 和深度学习 学习内容 学习核心 NLP 任务,如词汇切分、词干提取、词形还原、POS 标记和实体识别,以实现有效的文本预处理。 使用 One-Hot、TF-IDF、BOW、N-grams 和 Word2Vec 将文本转换为向量,用于 ML 和 DL 模型。 了解并实施神经网络,包括感知器、ANN 和数学反向传播。 掌握深度学习概念,如激活函数、损失函数和优化技术,如 SGD 和 Adam 使用 CNN 和 RNN 构建 NLP 和计算机视觉模型,以及真实数据集和端到端工作流程 岗位要求 基本的 Python 编程知识——包括变量、函数和循环,以及 NLP 和 DL 实现 熟悉高中数学——尤其是线性代数、概率和函数,用于理解神经网络和反向传播。 对 AI、ML 或数据科学感兴趣 – 不需要 NLP 或深度学习方面的经验;概念是从头开始教授的 描述 本课程专为渴望深入了解自然语言处理 (NLP) 和深度学习的激动人心的世界的人而设计,这是人工智能行业中增长最快和需求最旺盛的两个领域。无论您是学生、希望提升技能的在职专业人士,还是有抱负的数据科学家,本课程都能为您提供必要的工具和知识,以了解机器如何阅读、解释和学习人类语言。我们从 NLP 的基础开始,从头开始使用文本预处理技术,例如分词化、词干提取、词形还原、停用词删除、POS 标记和命名实体识别。这些技术对于准备非结构化文本数据至关重要,并用于聊天机器人、翻译器和推荐引擎等实际 AI 应用程序。接下来,您将学习如何使用 Bag of Words、TF-IDF、One-Hot E
内容概要:本文全面介绍了虚幻引擎4(UE4)的功能、应用场景、学习准备、基础操作、蓝图系统、材质与纹理、灯光与渲染等方面的内容。UE4是一款由Epic Games开发的强大游戏引擎,支持跨平台开发,广泛应用于游戏、虚拟现实、增强现实、建筑设计等领域。文章详细阐述了学习UE4前的硬件和软件准备,包括最低和推荐配置,以及Epic Games账户创建、启动器安装等步骤。接着介绍了UE4的界面组成和基本操作,如视口、内容浏览器、细节面板等。蓝图系统作为UE4的可视化脚本工具,极大降低了编程门槛,通过实例演练展示了蓝图的应用。材质与纹理部分讲解了材质编辑器的使用和纹理导入设置,灯光与渲染部分介绍了不同类型的灯光及其应用,以及后期处理和高质量图片渲染的方法。最后推荐了一些学习资源,包括官方文档、教程网站、论坛社区和书籍。 适合人群:对游戏开发感兴趣、希望学习UE4的初学者和有一定编程基础的研发人员。 使用场景及目标:①掌握UE4的基本操作和界面认知,为后续深入学习打下基础;②通过蓝图系统快速创建游戏逻辑,降低编程门槛;③学会材质与纹理的创建和设置,提升游戏画面的真实感;④掌握灯光与渲染技术,营造逼真的游戏氛围;⑤利用推荐的学习资源,加速UE4的学习进程。 阅读建议:本文内容详尽,涵盖了UE4的各个方面,建议读者按照章节顺序逐步学习,先从基础操作入手,再深入到蓝图、材质、灯光等高级功能。在学习过程中,结合实际项目进行练习,遇到问题时参考官方文档或社区论坛,不断积累经验和技能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值