JSP开发之Spring方法注入之替换方法实现

Spring提供了一种替换方法实现的机制,可以让我们改变某个bean某方法的实现。打个比方我们有一个bean,其中拥有一个add()方法可以用来计算两个整数的和,但这个时候我们想把它的实现逻辑改为如果两个整数的值相同则把它们相乘,否则还是把它们相加,在不改变或者是不能改变源码的情况下我们就可以通过Spring提供的替换方法实现机制来实现这一要求。
替换方法实现机制的核心是MethodReplacer接口,其中定义了一个reimplement ()方法,我们的替换方法实现的主要逻辑就是在该方法中实现的,
具体定义如下:
public interface MethodReplacer {
/**
* Reimplement the given method.
* @param obj the instance we're reimplementing the method for
* @param method the method to reimplement
* @param args arguments to the method
* @return return value for the method
*/
Object reimplement(Object obj, Method method, Object[] args) throws Throwable;
}
我们可以看到reimplement()方法将接收三个参数,其中obj表示需要替换方法实现的bean对象,method需要替换的方法,args则表示对应的方法参数。针对前面打的比方,假设我们有如下这样一个类定义对应的bean。
public class BeanA {
public int add(int a, int b) {
return a+b;
}
}
<bean id="beanA" class="com.app.BeanA"/>
如果我们需要替换add()方法的实现为a与b相等时则相乘,否则就相加,则我们可以针对该方法提供一个对应的MethodReplacer的实现类,具体实现如下所示。
public class BeanAReplacer implements MethodReplacer {
/**
* @param obj 对应目标对象,即beanA
* @param method 对应目标方法,即add
* @param args 对应目标参数,即a和b
*/
public Object reimplement(Object obj, Method method, Object[] args)
throws Throwable {
Integer a = (Integer)args[0];
Integer b = (Integer)args[1];
if (a.equals(b)) {
return a * b;
} else {
return a + b;
}
}
}
之后就需要在定义beanA时指定使用BeanAReplacer来替换beanA的add()方法实现,这是通过replaced-method元素来指定的。其需要指定两个属性,name和replacer。name用来指定需要替换的方法的名称,而replacer则用来指定用来替换的MethodReplacer对应的bean。所以,此时我们的beanA应该如下定义:
<bean id="beanAReplacer" class="com.app.BeanAReplacer"/> <bean id="beanA" class="com.app.BeanA"> <replaced-method name="add" replacer="beanAReplacer"/> </bean>
如果我们的MethodReplacer将要替换的方法在对应的bean中属于重载类型的方法,即存在多个方法名相同的方法时,我们还需要通过在replaced-method元素下通过arg-type元素来定义对应方法参数的类型,这样就可以区分需要替换的是哪一个方法。所以,针对上述示例,我们也可以如下定义:
<bean id="beanAReplacer" class="com.app.BeanAReplacer"/> <bean id="beanA" class="com.app.BeanA"> <replaced-method name="add" replacer="beanAReplacer"> <arg-type match="int"/> <arg-type match="int"/> </replaced-method> </bean>
对应方法名的方法只存在一个时,arg-type将不起作用,即Spring此时不会根据arg-type去取对应的方法进行替换,或者换句话说就是当replaced-method指定名称的方法只存在一个时,无论arg-type如何定义都是可以的。
以上就是JSP中Spring方法注入之替换方法实现的实例,希望能帮助到大家,如有疑问可以留言讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Spring方法注入之替换方法实现
# jsp
# spring
# 方法注入和替换
# 深入理解Spring中的Lookup(方法注入)
# 希望能
# 就可以
# 的是
# 都是
# 这是
# 这一
# 让我们
# 多个
# 如有
# 我们可以
# 或者是
# 这样一个
# 可以看到
# 这个时候
# 还需要
# 所示
# 打个
# 想把
# 谢谢大家
# 提供一个
相关文章:
南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?
C++中引用和指针有什么区别?(代码说明)
南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?
济南网站建设制作公司,室内设计网站一般都有哪些功能?
教学网站制作软件,学习*后期制作的网站有哪些?
如何在局域网内绑定自建网站域名?
网站图片在线制作软件,怎么在图片上做链接?
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
如何快速搭建FTP站点实现文件共享?
如何制作一个表白网站视频,关于勇敢表白的小标题?
如何在宝塔面板中修改默认建站目录?
如何选择PHP开源工具快速搭建网站?
如何在Golang中引入测试模块_Golang测试包导入与使用实践
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何通过老薛主机一键快速建站?
黑客如何利用漏洞与弱口令入侵网站服务器?
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
如何在宝塔面板中创建新站点?
宝盒自助建站智能生成技巧:SEO优化与关键词设置指南
建站之星后台管理系统如何操作?
C++如何将C风格字符串(char*)转换为std::string?(代码示例)
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
如何快速搭建高效WAP手机网站吸引移动用户?
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?
如何获取免费开源的自助建站系统源码?
如何选择高效稳定的ISP建站解决方案?
建站之星客服服务时间及联系方式如何?
网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?
Python lxml的etree和ElementTree有什么区别
中山网站制作网页,中山新生登记系统登记流程?
沈阳制作网站公司排名,沈阳装饰协会官方网站?
高端建站三要素:定制模板、企业官网与响应式设计优化
兔展官网 在线制作,怎样制作微信请帖?
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
香港服务器网站卡顿?如何解决网络延迟与负载问题?
网站制作公司排行榜,四大门户网站排名?
大连网站设计制作招聘信息,大连投诉网站有哪些?
智能起名网站制作软件有哪些,制作logo的软件?
详解jQuery停止动画——stop()方法的使用
制作网站外包平台,自动化接单网站有哪些?
Android使用GridView实现日历的简单功能
制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?
php8.4新语法match怎么用_php8.4match表达式替代switch【方法】
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
如何安全更换建站之星模板并保留数据?
如何设计高效校园网站?
C++时间戳转换成日期时间的步骤和示例代码
文字头像制作网站推荐软件,醒图能自动配文字吗?
枣阳网站制作,阳新火车站打的到仙岛湖多少钱?
*请认真填写需求信息,我们会在24小时内与您取得联系。