在这里会介绍如下知识点:
- factory-method
- factory-bean
- lookup-method
- replace-method
factory-method
在Spring中如果对一个bean的创建使用工厂方法模式就可以使用factory-method
/** * factory-method demo * @author zhangwei_david * @version $Id: FactoryMethodDemo.java, v 0.1 2015年7月8日 下午11:03:58 zhangwei_david Exp $ */ public class FactoryMethodDemo { public static Person getPerson() { return new Person() { @Override public String getSex() { return "male"; } }; } }
<bean id="male" class="com.cathy.demo.spring.FactoryMethodDemo" factory-method="getPerson" />
factory-bean
在上一个示例中class指向的是一个工厂方法类,如果这个工厂方法类对多个bean中都有使用,可以通过factory-bean 进行优化处理
/** * * @author zhangwei_david * @version $Id: FactoryBeanDemo.java, v 0.1 2015年7月8日 下午10:08:58 zhangwei_david Exp $ */ public class FactoryBeanDemo { public Man getMan() { return new Man(); } public Person getPerson() { System.out.println("getPerson"); return new Person() { @Override public String getSex() { return "femal"; } }; } }
<bean id="factoryBeanDemo" class="com.cathy.demo.spring.FactoryBeanDemo" /> <bean id="person" factory-bean="factoryBeanDemo" factory-method="getPerson" />
lookup-method
在Spring中多数的bean都是单例的,但是如果有一个单例bean需要引用一个prototype bean怎么处理了,不可能每次都需要查询加载bean吧。在这样的场景下lookup-method可以很好的解决。
/** * lookup-method使用示例 * * @author zhangwei_david * @version $Id: LookupMethodDemo.java, v 0.1 2015年7月8日 下午2:55:38 zhangwei_david Exp $ */ public abstract class LookupMethodDemo { protected Man man = getMan(); /**抽象方法**/ public abstract Man getMan(); public int getId() { return man.getId(); } }
/** * * @author zhangwei_david * @version $Id: Man.java, v 0.1 2015年6月7日 下午6:46:30 zhangwei_david Exp $ */ public class Man extends Person implements InitializingBean { private int id = (int) (Math.random() * 100); /** * @see com.cathy.demo.spring.Person#getSex() */ @Override public String getSex() { return "Male"; } /** * Getter method for property <tt>id</tt>. * * @return property value of id */ public int getId() { return id; } /** * Setter method for property <tt>id</tt>. * * @param id value to be assigned to property id */ public void setId(int id) { this.id = id; } /** * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet() */ public void afterPropertiesSet() throws Exception { System.out.println(" 初始化 Man [id=" + getId() + "]"); } }
<bean id="lookupMethodDemo" class="com.cathy.demo.spring.LookupMethodDemo"> <lookup-method name="getMan" bean="man" /> </bean> <bean id="man" class="com.cathy.demo.spring.Man" scope="prototype" />
/** * * @author zhangwei_david * @version $Id: MySpringTest.java, v 0.1 2015年6月7日 下午5:50:50 zhangwei_david Exp $ */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "classpath*:META-INF/spring/test-beans.xml") public class MySpringTest { @Autowired private LookupMethodDemo lookupMethodDemo; @Autowired private Man man; @Test public void test() { System.out.println(man.getId()); System.out.println(lookupMethodDemo.getId()); } }
测试的结果是:
初始化 Man [id=4] 初始化 Man [id=13] 初始化 Man [id=48] 48 13
replace-method
我们知道在Spring中可以使用AOP增强一个方法也可以替换一个方法的功能,可是有不少人却不知道在Spring中还有更简单的方式,就是使用replece-method替换一个方法。
/** * 一个方法替换的简单示例 * @author zhangwei_david * @version $Id: ReplacMethodDemo.java, v 0.1 2015年7月8日 下午10:26:22 zhangwei_david Exp $ */ public class ReplaceMethodDemo { public String getName() { return "original"; } }
/** * * @author zhangwei_david * @version $Id: Replacer.java, v 0.1 2015年7月8日 下午10:27:18 zhangwei_david Exp $ */ public class Replacer implements MethodReplacer { /** * @see org.springframework.beans.factory.support.MethodReplacer#reimplement(java.lang.Object, java.lang.reflect.Method, java.lang.Object[]) */ public Object reimplement(Object obj, Method method, Object[] args) throws Throwable { return "replacer"; } }
<bean id="replacer" class="com.cathy.demo.spring.Replacer" /> <!-- 方法替换的demo --> <bean id="replaceMethodDemo" class="com.cathy.demo.spring.ReplaceMethodDemo"> <replaced-method name="getName" replacer="replacer" /> </bean>
通过调用replceMethodDemo.getName()的结果是:replacer
相关推荐
RevitLookup-2021.0.0.13,供各位做REVIT二次开发的同仁们下载、学习、研究。
revit开发必备工具 本包中是已经编译过的文件,可以直接使用 ...编辑其中RevitLookup.dll 路径为编译路径 C:\RevitLookup-2016.0.0.6\CS\bin\Debug\RevitLookup.dll 重启revit: 即可在菜单栏看到工具
RevitLookup-2017.0.0.5RevitLookup-2017.0.0.5RevitLookup-2017.0.0.5RevitLookup-2017.0.0.5RevitLookup-2017.0.0.5
RevitLookup - 2016 的 源码,需要自己编译 用法:将RevitLookup.addin和RevitLookup.dll放到C:\ProgramData\Autodesk\Revit\Addins\2016下即可
RevitLookup - 2017 的 源码,需要自己编译 用法:将RevitLookup.addin和RevitLookup.dll放到C:\ProgramData\Autodesk\Revit\Addins\2017下即可
前端开源库-nsq-lookup-jcnsq lookup jc,通过nsqlookupd查找nsqd实例
“Lookup方法”可以使Spring替换一个bean原有的,获取其它对象具体的方法,并自动返回在容器中的查找结果。下面这篇文章主要给大家介绍了关于Spring中Lookup(方法注入)的相关资料,需要的朋友可以参考下
资源分类:Python库 所属语言:Python 使用前提:需要解压 资源全名:iso3_lookup-0.3.0-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
RevitLookup-2020.0.0.4 官方公布源代码需要自己编译,方便学习REVIT内核构架和开发
lookup-dns- dns.lookup替换dns.lookup标准方法的DNS缓存超级简单易用const request = require ( 'request' ) ;const { lookup } = require ( 'lookup-dns-cache' ) ;// With "request" modulerequest ( { url : '...
RevitLookup - 2018 的 源码,需要自己编译 用法:将RevitLookup.addin和RevitLookup.dll放到C:\ProgramData\Autodesk\Revit\Addins\2018下即可
python库,解压后可用。 资源全名:databricks_feature_lookup-0.0.5-py3-none-any.whl
资源来自pypi官网。 资源全名:databricks_feature_lookup-0.0.5-py3-none-any.whl
资源来自pypi官网。 资源全名:digdeo-syspass-ansible-lookup-0.2.4.tar.gz
资源来自pypi官网。 资源全名:drf-multi-lookup-0.0.14.tar.gz
python库,解压后可用。 资源全名:spacy_lookup-0.0.5-py2.py3-none-any.whl
资源来自pypi官网。 资源全名:spacy_lookup-0.0.5-py2.py3-none-any.whl
资源来自pypi官网。 资源全名:drf-multi-lookup-0.0.19.tar.gz
资源分类:Python库 所属语言:Python 资源全名:digdeo-syspass-ansible-lookup-0.1.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059