Spring--->FactoryBean创建复杂对象
2020-12-28 20:38
225 查看
1 FactoryBean接口
-
开发步骤
实现FactoryBean接口
-
Spring配置文件中注册
<bean id="conn" class="com.yuziyan.factorybean.ConnectionFactoryBean"/>
-
注意:
如果class类型是FactoryBean接口的实现类,那么通过id值获得的是这个类
getObject()
方法所返回的对象。比如 Connection SqlSessionFactory -
由于我们此时想获取的是Connection对象,所以需要在pom.xml文件中加入相关的依赖
<!-- MySql连接 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.48</version> </dependency>
细节分析
如果就想获得FactoryBean类型的对象,在id前加上&符号,
ctx.getBean("&conn"),此时获得的就是ConnectionFactoryBean对象本身。
isSingleton()方法,返回 true 只会创建一个复杂对象,返回 false 每一次都会创建新的对象
问题:根据这个对象的特点 ,决定是返回true (SqlSessionFactory) 还是 false (Connection)。
mysql高版本连接创建时,需要制定SSL证书,解决问题的方式。
url = "jdbc:mysql://localhost:3306/suns?useSSL=false"
体会依赖注入(DI)
可以把ConnectionFactoryBean中依赖的4个字符串信息 ,在配置文件中进行注入 ,解耦合。
<bean id="conn" class="com.yuziyan.factorybean.ConnectionFactoryBean"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/test?useSSL=false"/> <property name="username" value="root"/> <property name="password" value="root"/> </bean>
FactoryBean的实现原理[简易版]
Spring内部运行流程:
-
通过
conn获得ConnectionFactoryBean类的对象。
getObject()方法返回Connection类的对象。体现了接口回调的特点。
FactoryBean总结
Spring中用于创建复杂对象的一种方式,也是Spring原生提供的,后续讲解Spring整合其他框架,大量应用FactoryBean
相关文章推荐
- Springboot整合shiro,项目启动报错无法创建shiroFilterFactory的bean对象的问题
- Spring使用FactoryBean创建对象
- Spring Aop(十三)——ProxyFactoryBean创建代理对象
- debug代码解析Spring中FactoryBean创建AOP的代理对象
- Spring源码分析之BeanFactory对象创建
- spring MethodInvokingFactoryBean 的使用和了解,Spring 通过通过方法创建Bean的实例
- spring不通过注入的方式获取对象(BeanFactoryAware \ApplicationContextAware )
- 8.5.2: Spring的事务---使用TransactionProxyFactoryBean创建事务代理
- spring创建elasticsearch时出现的org.springframework.beans.factory.BeanCreationException: Error creating 问题
- Spring IOC源码分析(七):IOC容器的设计实现与bean对象的创建流程
- 使用Spring的FactoryBean创建同步队列线程池
- spring容器创建对象的3种方式(bean的实例化)
- Spring注解配置初始化对象(<bean>)
- Spring-Bean创建对象的步骤方式详解
- Spring使用facotry-method创建单例Bean总结<转>
- 利用Java反射机制创建对象,Spring管理Bean原理 例子。
- ERROR ContextLoader:238 - Context initialization failed>>org.springframework.beans.factory.BeanCreat
- SSH框架之Spring的开发步骤、bean对象创建的细节
- spring-02 spring的bean管理(使用注解方式创建对象 附代码)
- Spring ioc容器bean创建对象的多种方法