java中factory_Java后台面试--Spring中FactoryBean与BeanFactory的使用及区别
以前刚转Java的时候去面试被问到过Spring中FactoryBean与BeanFactory的使用及区别,由于之前没有重视这两个的区别,只是在配置文件里面加bean结点并通过注解的形式调用,所以被问到直接就gg了。好了,回来查了下网上介绍这两个的文章已经很多了,在些分享一篇讲解得比较好一篇文章。
1. 普通Bean的创建
spring 中的普通bean的创建是通过读取配置文件,将所有配置文件信息保存到beandefinition中,在使用getbean的时候通过反射创建实例,然后再将属性值填充。
1.1 普通bean的注入方式
1) 使用构造器注入
2) 使用setter方法注入
给属性添加set方法注入的时候使用如下方式:
3) 使用注解方式注入
@Autowired
private Person person;
注解可以加在属性上,也可以加在set方法上
2. FactoryBean的创建
由于普通bean创建的时候只能通过反射,不能自定义bean的创建方式,因而如果有需要自定义bean创建方式的需要的时候,可以使用factorybean。
1)自定义factorybean
创建factorybean,spring在定义bean的时候为我们提供了factory-bean这样一个属性,说明这个bean是一个由工厂类创建的对象,这个对象通过指定的factory-method方法生成。
public class JDBConnectionFactory implements DBConnectionFactory {
private String nodeName;
public JDBConnectionFactory(String nodeName) {
this.nodeName = nodeName;
}
public Connection create() {
Connection connection = null;
try {
connection = new JDBC4Connection(nodeName, 0 ,new Properties(), "", "");
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
}
2)通过factoryBean接口创建bean
FactoryBean接口有这样几个方法:
a) T getObject() throws Exception;
b) Class
public class PersonFactoryBean implements FactoryBean{
public Person getObject() throws Exception {
return new Person(0,"");
}
public Class> getObjectType() {
return Person.class;
}
public boolean isSingleton() {
return false;
}
}
3. BeanFactory
BeanFactory:创建bean的工厂,BeanFactorty是一个接口,spring中所有对象的创建都围绕着BeanFactory展开。spring中BeanFacroty的实现包括AutowireCapableBeanFactory、DefaultListableBeanFactory、XmlBeanFactory等,通常在springIOC中,会通过beanFactory创建factoryBean。BeanFactory接口中的方法包括:
4. BeanFactory与FactoryBean的区别
BeanFactory是个Factory,也就是IOC容器或对象工厂,FactoryBean是个Bean。
在Spring中,所有的Bean都是由BeanFactory(也就是IOC容器)来进行管理的。
但对FactoryBean而言,这个Bean不是简单的Bean,而是一个能生产或者修饰对象生成的工厂Bean,它的实现与设计模式中的工厂模式和修饰器模式类似。
java中factory_Java后台面试--Spring中FactoryBean与BeanFactory的使用及区别相关推荐
- java di是什么_java spring中DIP是什意思?DI的含义是什么?
在科学技术水平不断进步发展的今时今日,各种新兴软件不断涌现,这也刺激了人们对于新技术学习的欲望.学习java的人也越来越多.今天就来为大家介绍一些基础知识,也就是java中DIP是什意思以及DI的含义 ...
- 面试——Spring中的循环依赖
1 什么是Spring循环依赖 // A依赖了B,B是A对象中的一个属性 class A{public B b; }// B依赖了A class B{public A a; } 在普通的代码中,对象之 ...
- web.xml中的contextConfigLocation在spring中的作用
在web.xml中通过contextConfigLocation配置spring,contextConfigLocation 参数定义了要装入的 Spring 配置文件. 如果想装入多个配置文件,可以 ...
- java 调用 spring,java中使用redis和spring中调用redis
1.需要的jar包,配置的pom.xml文件 redis.clients jedis 2.7.2 2.java调用 /** * @文件名称: JedisTest.java * @描述: TODO * ...
- java 长轮询_java – Spring中的长轮询
我们有一个独特的案例,我们需要与外部API接口,这需要我们长时间轮询他们的端点以获得他们所谓的实时事件. 问题是我们可能有多达80,000人/设备在任何给定时间点击此端点,监听事件,每个设备/人1个连 ...
- java观察者模式在spring中的应用_Spring源码之spring中的观察者模式和监听器的使用...
声明:本文根据鲁班学院子路老师spring中观察者模式课程整理得来 观察者模式特点: 被观察者持有监听的观察者的引用. 被观察者支持增加和删除的观察者. 被观察者状态改变通知观察者. JDK中观察者i ...
- 面试必杀技,讲一讲Spring中的循环依赖
本系列文章: 听说你还没学Spring就被源码编译劝退了?30+张图带你玩转Spring编译 读源码,我们可以从第一行读起 你知道Spring是怎么解析配置类的吗? 配置类为什么要添加@Configu ...
- (转)Spring中Singleton模式的线程安全
不知道哪里的文章,总结性还是比较好的.但是代码凌乱,有的还没有图.如果找到原文了可以进行替换! spring中的单例 spring中管理的bean实例默认情况下是单例的[sigleton类型],就还有 ...
- Spring中Singleton模式的线程安全
不知道哪里的文章,总结性还是比较好的.但是代码凌乱,有的还没有图.如果找到原文了可以进行替换! spring中的单例 spring中管理的bean实例默认情况下是单例的[sigleton类型],就还有 ...
最新文章
- Android Canvas 绘图
- 移动平均滤波_Kalman滤波理论与MATLAB实现引言
- SpeedNet: Learning the Speediness in Videos
- 微服务架构方案 springBoot+dubbo
- Good Numbers(HDU5447+唯一分解)
- SVN-功能介绍之切换
- 社交电商为什么这么火
- 大数据平台目前存在的问题
- iMX6QD How to Add 24-bit LVDS Support in Android
- js 图片上传时加水印
- 使用python对微信好友进行数据分析
- 工程师笔记 | 嵌入式工程师常用软件
- Airbnb短租房源数据可视化
- go如何实现图片拼接,文字书写
- BZOJ4598: [Sdoi2016]模式字符串
- 中级微观经济学:Chap 14 消费者剩余
- matlab 色温图,技术:图文教你了解色温及如何选择色温
- 针对尚硅谷教学微服务硅谷课堂在线学习平台的部分功能的自我改进
- Java Web中涉及的编解码
- python爬取历史天气查询_历史天气爬取
热门文章
- Python:numpy数组转换为json格式
- 141.4. 分布式安装(CentOS 6 + hadoop-1.1.2)
- 12.使用default-Action配置统一访问
- 新手指南:X5Cloud云端应用安装步骤(有图有说明)
- “内存不足”的九大原因及解决方法
- 然后是几点 c语言,2-2. 然后是几点
- 倒计时小工具_想要工作效率更高?这几款计时工具你一定不能错过!
- cad无法加载arx文件_CAD文件损坏?无法打开?试试这8个方法吧
- 城市天际线 android,都市天际线安卓手机版
- php7如何安装swoole,初学Swoole:PHP7安装Swoole的步骤