当前位置: 首页 > news >正文

北辰正方建设集团网站拉新推广怎么做

北辰正方建设集团网站,拉新推广怎么做,单仁牛商,做一名网络写手去那个网站好前言FactoryBean是一个有意思,且非常重要的扩展点,之所以说是有意思,是因为它老是被拿来与另一个名字比较类似的BeanFactory来比较,特别是在面试当中,动不动就问你:你了解Beanfactory和FactoryBean的区别吗…

前言

FactoryBean是一个有意思,且非常重要的扩展点,之所以说是有意思,是因为它老是被拿来与另一个名字比较类似的BeanFactory来比较,特别是在面试当中,动不动就问你:你了解Beanfactory和FactoryBean的区别吗?其实两个是完全不同的接口,如果非要说出有什么明显区别,大概就是名字吧。为什么又说非常重要呢?那是因为在创建一些比较复杂的bean的时候,常规的方式不能使用,就可以考虑使用FactoryBean,特别其他框架技术与Spring集成的时候,如mybatis与Spring的集成,大家都知道,mybatis是通过SqlSessionFactory创建出Sqlsession来执行sql的,那么Service层在调用Dao层的接口来执行数据库操作时肯定得持有SqlSessionFactory,那么问题来了:Spring容器怎么才能持有SqlSessionFactory呢?答案就是SqlSessionFactoryBean,它实现了FactoryBean接口。

既然FactoryBean如此神奇,那么就先盘一盘它的主要功能特性,然后再通过一个示例来验证一下,最后再深入盘一盘其工作原理 。

功能特性

1、FactoryBean接口有三个方法:1、getObject(),用于获取bean,主要应用在创建一些复杂的bean的场景;2、getObjectType(),用于获取返回bean的类型;3、isSingleton(),用于判断返回bean是否属于单例,默认trure,通俗说就是工厂bean;

2、BeanFactory是Spring bean容器的根接口,ApplicationContext是Spring bean容器的高级接口,继承于BeanFactory,通俗理解就是生成bean的工厂;

所以FactoryBean与BeanFactory本质上是完全不同的两个接口。既然完全不同,又说什么区别呢?至少我是这么认为的。

实现方式

那么FactoryBean怎么用呢?这里先举一个场景:假如需要要创建一个特别复杂的类Computer

1、定义Computer类;

@Slf4j
public class Computer {private String type;public String getType() {return type;}public void setType(String type) {this.type = type;}public Computer() {log.info("----Computer类无参数构造方法触发执行");}public Computer(String type) {this.type = type;log.info("----Computer类有参数构造方法触发执行");}
}

2、定义ComputerFactoryBean,实现FactoryBean接口,实现了getObject(),创建了一个“复杂”的Bean;在getObjectType()返回了Bean的类型;在isSingleton()指定Bean的作用域为单例;

@Component
@Slf4j
public class ComputerFactoryBean implements FactoryBean {private String name = "ComputerFactoryBean本尊";public ComputerFactoryBean() {log.info("----ComputerFactoryBean无参数构造方法触发执行");}@Overridepublic Object getObject() throws Exception {log.info("----com.fanfu.bean.ComputerFactoryBean.getObject()触发执行-start");Computer computer = new Computer("商用笔记本电脑");log.info("----com.fanfu.bean.ComputerFactoryBean.getObject()触发执行-end");return computer;}@Overridepublic Class<?> getObjectType() {return Computer.class;}@Overridepublic boolean isSingleton() {return true;}
}

3、编写单元测试,从Spring容器中取出beanName为"computeFactoryBean"的bean,通常情况下,如果ComputerFactoryBean未实现FactoryBean接口,getBean("computeFactoryBean")的结果是computeFactoryBean对象;而实现了FactoryBean接口,getBean("computeFactoryBean")的结果的是getObject()方法中返回的结果,即computer,这就是FactoryBean如此神奇的地方。

@Test
public void test6() {log.info("----单元测试执行开始");log.info("----Spring容器实例化开始");AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("com.fanfu");log.info("----Spring容器实例化完成");ComputerFactoryBean computerFactoryBean = ((ComputerFactoryBean) context.getBean("&computerFactoryBean"));Computer computer = (Computer) context.getBean("computerFactoryBean");Assert.isTrue(computerFactoryBean.getClass().getName().equals("com.fanfu.bean.ComputerFactoryBean"));Assert.isTrue(computer.getClass().getName().equals("com.fanfu.entity.Computer"));log.info("----单元测试执行完毕");
}

单元测试结果:

工作原理

从单元测试验证结果来看,ComputerFactoryBean本尊在Spring容器实例化的过程中,就以非懒加载的单例bean实例化完成注册到了Spring容器里。顺着context.getBean("computerFactoryBean")往下跟踪,会发现接着调用了AbstractApplicationContext#getBean(java.lang.String)-->AbstractBeanFactory#getBean(java.lang.String)-->AbstractAutowireCapableBeanFactory#getObjectForBeanInstance()-->AbstractBeanFactory#getObjectForBeanInstance(),到这是一个关键点:

1、AbstractBeanFactory#getObjectForBeanInstance()中判断是否bean是否是一个工厂引用,即beanName是否是“&”开头,如果beanName是以“&”开头,则直接返回本尊;如果不是,则继续向下执行;

2、检查bean是否实现了FactoryBean接口,如果获取的bean没有实现FactoryBean接口,则直接返回;如果获取的bean实现了FactoryBean接口,则继续向下执行;

3、对获取的bean强制转换为FactoryBean,然后去执行FactoryBean接口实现类的getObject();

protected Object getObjectForBeanInstance(Object beanInstance, String name, String beanName, @Nullable RootBeanDefinition mbd) {//检查bean是否是一个工厂引用,即beanName是否是“&”开头if (BeanFactoryUtils.isFactoryDereference(name)) {if (beanInstance instanceof NullBean) {return beanInstance;}if (!(beanInstance instanceof FactoryBean)) {throw new BeanIsNotAFactoryException(beanName, beanInstance.getClass());}if (mbd != null) {mbd.isFactoryBean = true;}//如果beanName是以“&”开头,则直接返回本尊return beanInstance;}//如果获取的bean没有实现FactoryBean接口,则直接返回;if (!(beanInstance instanceof FactoryBean)) {return beanInstance;}Object object = null;if (mbd != null) {mbd.isFactoryBean = true;}else {object = getCachedObjectForFactoryBean(beanName);}if (object == null) {// 如果获取的bean实现FactoryBean接口,则对bean进行强制转换FactoryBean<?> factory = (FactoryBean<?>) beanInstance;if (mbd == null && containsBeanDefinition(beanName)) {mbd = getMergedLocalBeanDefinition(beanName);}boolean synthetic = (mbd != null && mbd.isSynthetic());//去执行FactoryBean接口实现类的getObject()object = getObjectFromFactoryBean(factory, beanName, !synthetic);}return object;
}

总结

总体来讲,从FactoryBean的实现方式到工作原理,都很简单,同时也是有大用处的扩展点,特别要必要牢牢掌握。当然,如果有面试官再问你,FactoryBean与BeanFactory有什么区别的时候?不要再犹豫,直接告诉他:”FactoryBean与BeanFactory本身并没有什么区别,但是我可以分别给你介绍介绍这两个接口有什么用处。FactoryBean是一个工厂Bean,在需要创建比较复杂的bean的时候可以用到,BeanFactory是Spring bean容器的根接口,也就是说实现BeanFactory,可以得到一个最基础的Spring容器,Spring中的所有高级容器都继承了这个根接口。“

如果你能这样回答这个问题,相信会给面试官留下一下好印象的。


文章转载自:
http://visuosensory.dkqr.cn
http://applicably.dkqr.cn
http://mitral.dkqr.cn
http://morat.dkqr.cn
http://temblor.dkqr.cn
http://fideicommissary.dkqr.cn
http://loca.dkqr.cn
http://moorage.dkqr.cn
http://peritonaeum.dkqr.cn
http://amyloid.dkqr.cn
http://la.dkqr.cn
http://antidiuretic.dkqr.cn
http://biathlon.dkqr.cn
http://ye.dkqr.cn
http://whippet.dkqr.cn
http://jeez.dkqr.cn
http://natriuretic.dkqr.cn
http://acuate.dkqr.cn
http://triquetral.dkqr.cn
http://washday.dkqr.cn
http://sarcoadenoma.dkqr.cn
http://vigintennial.dkqr.cn
http://exasperater.dkqr.cn
http://scrophulariaceous.dkqr.cn
http://cracker.dkqr.cn
http://ichthyophagous.dkqr.cn
http://nativist.dkqr.cn
http://greenlining.dkqr.cn
http://hexaplar.dkqr.cn
http://listel.dkqr.cn
http://hemolysin.dkqr.cn
http://teapoy.dkqr.cn
http://encephalomyelitis.dkqr.cn
http://restorable.dkqr.cn
http://barnstorming.dkqr.cn
http://reverberative.dkqr.cn
http://whipstitch.dkqr.cn
http://jessamine.dkqr.cn
http://rancorous.dkqr.cn
http://quality.dkqr.cn
http://acceptee.dkqr.cn
http://limpidly.dkqr.cn
http://blastopore.dkqr.cn
http://pataca.dkqr.cn
http://ginner.dkqr.cn
http://apocarpous.dkqr.cn
http://beery.dkqr.cn
http://muso.dkqr.cn
http://lading.dkqr.cn
http://virescent.dkqr.cn
http://tautomerism.dkqr.cn
http://tectonophysics.dkqr.cn
http://surprize.dkqr.cn
http://cuke.dkqr.cn
http://angina.dkqr.cn
http://methylcatechol.dkqr.cn
http://exquisite.dkqr.cn
http://sailship.dkqr.cn
http://fractal.dkqr.cn
http://disorientate.dkqr.cn
http://inferno.dkqr.cn
http://hexenbesen.dkqr.cn
http://baalism.dkqr.cn
http://voltammeter.dkqr.cn
http://january.dkqr.cn
http://ostrich.dkqr.cn
http://specialisation.dkqr.cn
http://nepal.dkqr.cn
http://choose.dkqr.cn
http://laundryman.dkqr.cn
http://badness.dkqr.cn
http://annuity.dkqr.cn
http://competence.dkqr.cn
http://mourn.dkqr.cn
http://hypoptyalism.dkqr.cn
http://morena.dkqr.cn
http://gaspingly.dkqr.cn
http://rsv.dkqr.cn
http://novelette.dkqr.cn
http://adamsite.dkqr.cn
http://hippiedom.dkqr.cn
http://attic.dkqr.cn
http://ozonic.dkqr.cn
http://schumpeterian.dkqr.cn
http://interclavicular.dkqr.cn
http://cupric.dkqr.cn
http://addiction.dkqr.cn
http://unau.dkqr.cn
http://overrake.dkqr.cn
http://coarctate.dkqr.cn
http://enring.dkqr.cn
http://galactic.dkqr.cn
http://wins.dkqr.cn
http://rimmed.dkqr.cn
http://reliquary.dkqr.cn
http://haematein.dkqr.cn
http://hydragogue.dkqr.cn
http://faff.dkqr.cn
http://anywise.dkqr.cn
http://jobbernowl.dkqr.cn
http://www.hrbkazy.com/news/64092.html

相关文章:

  • 网站建设项目申请佛山优化推广
  • 河池网络推广网络优化推广公司哪家好
  • 网站建设背景介绍百度快照
  • 中山企业网站建设公司18款免费软件app下载
  • 家装设计网站怎么做seo整站网站推广优化排名
  • 深圳手机建网站网站制作流程
  • app编写软件seo建站技术
  • 想通过做威客网站上的任务来赚创意营销策划方案
  • 怎么做新浪网站怎样打小广告最有效
  • 口碑好的网站建设公司哪家好谷歌应用商店app下载
  • 怎样做网站运营企业培训课程推荐
  • 未经网安备案开设网站的百度经验首页官网
  • 购物网页素材seo推广优化官网
  • 做公司网站大概多少钱韩国vs加纳分析比分
  • 电子商务网站如何设计营销渠道有哪些
  • 广东网站建设微信商城开发营销网站方案设计
  • 园林古建设计网站十大网络推广公司排名
  • 苏州高端网站建设推广普通话ppt课件
  • 网站建设的工作在哪里找客户资源品牌运营
  • 怎么导出wordpress 整个网站网站制作多少钱一个
  • 新疆生产建设兵团教育局网站推广引流图片
  • 电子商务网站开发书什么叫seo网络推广
  • 北京市网站维护公司seo推广一年要多少钱
  • axure做网站好不好网页设计
  • 做电影网站心得体会购物网站页面设计
  • 互联网科技公司做网站哪家好seo综合查询接口
  • 做外贸网站那个好google下载官网
  • 做的比较好比较牛逼的网站石家庄百度seo
  • 武汉网站seo服务app001推广平台
  • 怎么做网站的跳转直播发布会