详解Spring中的FactoryBean
spring FactoryBean是创建复杂的bean,一般的bean直接用xml配置即可,如果一个bean的创建过程中涉及到很多其他的bean和复杂的逻辑,用xml配置比较困难,这时可以考虑用FactoryBean
例子如下:
1:创建一个Car类(是为了简便)一般不能直接给出Car类,如果是这样直接注入就可以或者Car对象了,这里只是为了简便。
packagecom.myapp.core.factorybean; publicclassCar{ privateStringmake; privateintyear; publicStringgetMake(){ returnmake; } publicvoidsetMake(Stringmake){ this.make=make; } publicintgetYear(){ returnyear; } publicvoidsetYear(intyear){ this.year=year; } }
2:一个FactoryBean的实现拥有创建car
packagecom.myapp.core.factorybean; importorg.springframework.beans.factory.FactoryBean; publicclassMyCarFactoryBeanimplementsFactoryBean{ privateStringmake; privateintyear; publicvoidsetMake(Stringmake){ this.make=make; } publicvoidsetYear(intyear){ this.year=year; } @Override publicCargetObject()throwsException{ //TODOAuto-generatedmethodstub //Hereisacomplexcarobjectcreated //wouldn'tbeaveryusefulFactoryBean //ifwecouldsimplyinstantiatetheobject! Carcar=newCar(); if(year!=0){ car.setYear(this.year); } if("make".equals(make)){ car.setMake("wearemakingblablabla"); }else{ car.setMake(this.make); } returncar; } @Override publicClass>getObjectType(){ //TODOAuto-generatedmethodstub returnCar.class; } @Override publicbooleanisSingleton(){ //TODOAuto-generatedmethodstub returnfalse; } }
以上中创建car太简单了,如果太简单就没有必要用FactoryBean创建了,可以写的复杂些。
3:Person引用一个car
packagecom.myapp.core.factorybean; publicclassPerson{ privateCarcar; publicCargetCar(){ returncar; } publicvoidsetCar(Carcar){ this.car=car; } publicStringtoString(){ returncar.getMake()+"::::"+car.getYear(); } }
4:配置引用xml格式:
5:编写测试类测试:
packagecom.myapp.core.factorybean; importorg.springframework.context.ApplicationContext; importorg.springframework.context.support.ClassPathXmlApplicationContext; publicclassMainTest{ publicstaticvoidmain(String[]args){ ApplicationContextcontext=newClassPathXmlApplicationContext("resource/others.xml"); Personperson=(Person)context.getBean("person"); //Carcar=(Car)context.getBean("car"); //System.out.println(car); System.out.println(person); } }
测试结果makeingcar::::123
利用FactoryBean创建car成功
只是为了说明思想。因为这个接口太重要了。在Spring中有很多类实现了该接口。
以上所述是小编给大家介绍的详解Spring中的FactoryBean,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!