spring容器创建bean对象的方式
xml文件中有bean的配置,而且这个bean所对应的java类中存在一个无参构造器
那么这个时候spring容器就可以使用反射调用无参构造器来创建实例了(常规的方式)
通过工厂类获得实例(工厂类实现了接口FactoryBean<?>
注意spring中的PropertyPlaceholderConfigurer类的使用,在htmlsingle中直接搜索类名即可
例如:
//工厂类实现指定接口并且实现接口中的三个抽象方法:
public class ConnectionFactory implements FactoryBean<Connection>{
private String driver;
private String url;
private String username;
private String password; @Override
public Connection getObject() throws Exception {
Class.forName(driver);
Connection conn =
DriverManager.getConnection(url,username,password);
return conn;
} @Override
public boolean isSingleton() {
return false;
} @Override
public Class<Connection> getObjectType() {
return Connection.class;
}
set/get
....
}
xml文件:
下面配置的这个类,可以自动的帮我们去读取指定的properties文件的内容,文件中用key-value的形式存放数据
读完之后我们就可以用${key}这种形式去拿文件中的value值了
在htmlsingle中直接搜索类名即可得到相关配置样例
classpath指的是从src下面找.
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>classpath:oracle.properties</value>
</property>
</bean>
因为这个类是一个工厂类,所以我们用名字conn在容器中拿对象的时候,
拿到并不是这个工厂类对象,而是这个工厂类对象调用完工厂方法后所返回的对象.
<bean name="conn" class="com.briup.ioc.factory.ConnectionFactory">
<property name="driver">
<value>${driver}</value>
</property> <property name="url">
<value>${url}</value>
</property> <property name="username">
<value>${username}</value>
</property> <property name="password">
<value>${password}</value>
</property>
</bean>
main:
String path = "com/briup/ioc/factory/factory.xml";
ApplicationContext container =
new ClassPathXmlApplicationContext(path);
Connection conn =
(Connection)container.getBean("conn"); System.out.println(conn);
通过实例工厂获得bean对象(不需要实现或者继承任何接口或者父类),就是一个普通的工厂实例instanceFactory
//一个普通的工厂类
public class ConnectionFactory{
private String driver;
private String url;
private String username;
private String password; public Object getConnection() throws Exception {
Class.forName(driver);
Connection conn =
DriverManager.getConnection(url,username,password);
return conn;
}
get/set
....
}
xml文件:
<!-- 读取properties文件 -->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>classpath:oracle.properties</value>
</property>
</bean>
<!-- 配置工厂类 -->
<bean name="factory" class="com.briup.ioc.instanceFactory.ConnectionFactory">
<property name="driver">
<value>${driver}</value>
</property> <property name="url">
<value>${url}</value>
</property> <property name="username">
<value>${username}</value>
</property> <property name="password">
<value>${password}</value>
</property>
</bean> <!-- 将来通过这个conn来拿对象,拿到的是名字为factory的工厂类调用完名字为getConnection方法之后所返回的对象。-->
<bean name="conn" factory-bean="factory" factory-method="getConnection"></bean>
main:
String path = "com/briup/ioc/instanceFactory/instanceFactory.xml";
ApplicationContext container =
new ClassPathXmlApplicationContext(path); Connection conn =
(Connection)container.getBean("conn"); System.out.println(conn);
通过静态工厂获得实例
例如
//静态工厂类
public class ConnectionFactory{
private static String driver =
"oracle.jdbc.driver.OracleDriver";
private static String url =
"jdbc:oracle:thin:@127.0.0.1:1521:XE";
private static String username = "briup";
private static String password = "briup"; public static Object getConnection() throws Exception {
Class.forName(driver);
Connection conn =
DriverManager.getConnection(url,username,password);
return conn;
}
}
xml文件:
<!-- 这样配置一定要求getConnection方法是静态方法 -->
<bean name="conn" class="com.briup.ioc.staticFactory.ConnectionFactory" factory-method="getConnection"></bean>
main:
String path = "com/briup/ioc/staticFactory/staticFactory.xml";
ApplicationContext container =
new ClassPathXmlApplicationContext(path); Connection conn =
(Connection)container.getBean("conn"); System.out.println(conn);
spring容器创建bean对象的方式的更多相关文章
- 50、[源码]-Spring容器创建-Bean创建完成
50.[源码]-Spring容器创建-Bean创建完成 11.finishBeanFactoryInitialization(beanFactory);初始化所有剩下的单实例bean: beanFac ...
- spring:bean的细节之三种创建Bean对象的方式
<!--创建Bean的三种方式--><!--第一种方式,使用默认构造函数创建 在spring的配置文件中使用bean标签,配以id和class属性之后,且没有属性和标签时. 采用的就 ...
- spring中创建bean对象的三种方式以及作用范围
时间:2020/02/02 一.在spring的xml配置文件中创建bean对象的三种方式: 1.使用默认构造函数创建.在spring的配置文件中使用bean标签,配以id和class属性之后,且没有 ...
- 阶段3 2.Spring_03.Spring的 IOC 和 DI_6 spring中bean的细节之三种创建Bean对象的方式
目前这里能调用是因为,在service的实现类里面,new了一个dao的对象 正常情况下 这里不应该是new一个对象,应该等于null或为空 设置为空侯再运行就会报错 出错的原因是这里为null 需要 ...
- Java代码获取spring 容器的bean几种方式
一.目的 写了一个项目,多个module,然后想在A模块中实现固定的config注入,当B模块引用A时候,能够直接填写相对应的配置信息就行了.但是遇到一个问题,B引用A时候,A的配置信息总是填充不了, ...
- Spring容器对Bean组件的管理
Bean对象创建 默认是随着容器创建 可以使用 lazy-init=true:在调用 getBean 延迟创建 也可以用 <beans default-lazy-init="true& ...
- sping练习,在Eclipse搭建的Spring开发环境中,使用工厂方式创建Bean对象,将创建的Bean对象输出到控制台。
相关 知识 >>> 相关 练习 >>> 实现要求: 在Eclipse搭建的Spring开发环境中,使用工厂方式创建Bean对象,将创建的Bean对象输出到控制台.要 ...
- Spring IoC 容器和 bean 对象
程序的耦合性: 耦合性(Coupling),又叫耦合度,是对模块间关联程度的度量.耦合的强弱取决于模块间接口的复杂性.调用模块的方式以及通过界面传送数据的多少.模块间的耦合度是指模块之间的依赖关系,包 ...
- Spring IOC容器创建bean过程浅析
1. 背景 Spring框架本身非常庞大,源码阅读可以从Spring IOC容器的实现开始一点点了解.然而即便是IOC容器,代码仍然是非常多,短时间内全部精读完并不现实 本文分析比较浅,而完整的IOC ...
随机推荐
- Erlang学习记录:相关工具和文档
在线工具和文档 网址 说明 OTP Reference Page Index 内置模块查询 Erlang/OTP Applications N Kernel Reference Manual 入门官方 ...
- SQL 标量函数-----日期函数 day() 、month()、year() 转载
select day(createtime) from life_unite_product --取时间字段的天值 select month(createtime) from life_u ...
- kubernetes istio的快速安装和使用例子
安装 [root@master ~]# wget https://github.com/istio/istio/releases/download/1.1.5/istio-1.1.5-linux.ta ...
- Responder对象
Responder对象 响应者是一个对象,它可以响应事件并处理它们.所有响应者对象是类的,最终从UIResponder的( IOS)或NSResponder ( OS X)继承实例.这些类声明一个编程 ...
- 关于Delphi中的字符串的详细分析
关于Delphi中的字符串的详细分析 只是浅浅的解析下,让大家可以快速的理解字符串. 其中的所有代码均在Delphi7下测试通过. Delphi 4,5,6,7中有字符串类型包括了: 短字符串(S ...
- Python 实现快速排序和随机快速排序
直接上代码: #快速排序 #coding: utf-8 def quicksort(a,left,right): if(left<right): mid = partition(a,left,r ...
- 执行sql查询,并查看语句执行花费时间
declare @d datetimeset @d=getdate() select * from A PRINT '[语句执行花费时间(毫秒)]'+LTRIM(datediff(ms,@d,getd ...
- 使用Image作为BackgroundColor 使用
https://www.hackingwithswift.com/example-code/uicolor/how-to-use-an-image-for-your-background-color- ...
- ThinkPHP无限分类模块设计
public function catelist(){ $cate=D('Cate'); //var_dump($cate->gettree());exit; $cateres=$cate-&g ...
- 开机自动调用.bat文件且浏览器全屏展示
1,将 .bat文件放入到以下路径中 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup 或 C:\Users\Administr ...