spring容器创建bean对象的方式以及如何处理多个spring配置文件
spring学习教程7-spring容器创建bean对象的方式以及如何处理多个spring配置文件
spring容器创建bean对象的方式以及如何处理多个spring配置文件
1.spring容器创建bean对象的方式
注意:我们之前说的DI依赖注入是对于bean对象的属性的注入,是如何给属性赋值,如何配置属性,并不是创建对象。
(1)xml文件中有bean的配置,而且这个bean所对应的java类中存在一个无参构造器,那么这个时候spring容器就可以使用反射调用无参构造器来创建实例了(常规的方式);所以默认下我们是用无参构造器来创建bean的。这里和我们就是我们原来的做法,不进行代码演示,如果想测试,可以把一个bean类的无参构造器去掉,发现程序会报错。
(2)通过工厂类获得实例(工厂类实现了接口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
- ....
- }
其实这种方法就是用spring的类来实现的工厂创建bean,所以必须实现spring的FactoryBean接口,在后面我们可以通过我们熟悉的一般工厂类来创建bean,俩者比较,你会更清楚这种方法的过程。不过这种方法感觉不好用。
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>
上面这个代码是配置类PropertyPlaceholderConfihurer的使用,代码的作用就是加载properties配置文件,在下面的配置中使用。 Spring 2.5 之后: 可通过 <context:property-placeholder> 元素简化:
- <context:property-placeholder location="classpath:beanProperty.properties"/><span style="font-size:16px;text-align:justify;font-family:'Microsoft YaHei', SimHei, Arial;background-color:rgb(255,255,255);"> </span>
<!--
因为这个类是一个工厂类,所以我们用名字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>
上面的代码是配置bean的工厂类,然后得到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);
(3).通过实例工厂获得bean对象(不需要实现或者继承任何接口或者父类),就是一个普通的工厂实例instanceFactory
//一个普通的工厂类
- public class CatFactoryBean {
- public Cat getCat(int id,String name){
- return new Cat(id, name);
- }
- }
这时一般我们写的工厂类
- <bean id="catFactory" class="com.hoperun.spring.CatFactoryBean"></bean>
- <bean id="cat" class="com.hoperun.spring.Cat" factory-bean="catFactory" factory-method="getCat">
- <constructor-arg value="22"></constructor-arg>
- <constructor-arg value="fengwei"></constructor-arg>
- </bean>
这时配置文件,可以看到,先是配置了工厂的bean,然后在配置bean,关键实在bean的属性中有factory-bean和factory-method,指定了工厂类和得到这个bean对象对应的方法,下面constructor-arg是方法的参数,通过这样,我们就得到了对象。
(4)通过静态工厂获得实例
静态工厂:就是得到工厂的方法是静态的
- public static Cat getCat1(int id,String name){
- return new Cat(id, name);
- }
- <bean id="cat" class="com.hoperun.spring.CatFactoryBean" factory-method="getCat1">
- <constructor-arg value="2222"></constructor-arg>
- <constructor-arg value="fengwei"></constructor-arg>
- </bean>
这样我们就配置好了,可以看到,和实例工厂相比较还是bean属性的问题,静态工厂不需要建立bean,在class中填入静态工厂类就可以了,然后指定方法,参数。
2,处理多个配置文件
我们发现spring的配置文件每次都是指定加载的applicationContext.xml,如果把所有的bean配置都加入一个文件中,太大了,所以spring的配置文件是可以有多个的,多个文件可以一起加载。方法一:ClassPathXmlApplicationContext(),它有几个重载的构造器,参数不一样,可以是一个String[]数组,这样就明白了,可以将所有的名字都放在数组里,让它加载。
方法二:如果我们在spring框架中配置了多个xml文件,我们可以在读取配置文件的时候把这些xml文件一下全都读取,也可以只读一个总的xml文件,在这个总的xml文件中把其他的xml全都都导入进来。
例如:
- student.xml文件:
- <bean name="student" class="com.briup.bean.Student">
- <property name="id">
- <value>25</value>
- </property>
- </bean>
- teacher.xml文件:
- <bean name="teacher" class="com.briup.bean.Teacher">
- <property name="student" ref="student"></property>
- </bean>
- import.xml文件:
- <import resource="teacher.xml"/>
- <import resource="student.xml"/>
- main:
- String[] path = {"com/briup/ioc/imp/import.xml"};
- ApplicationContext container =
- new ClassPathXmlApplicationContext(path);
- Teacher t = (Teacher) container.getBean("teacher");
- System.out.println(t.getStudent());
转载于:https://www.cnblogs.com/erma0-007/p/8655313.html
spring容器创建bean对象的方式以及如何处理多个spring配置文件相关推荐
- IOC容器创建bean对象的4种方式
前言: Spring容器创建bean对象,一般通过反射机制查找bean元素的class属性值来找到要实例化的类,从而实例化bean对象.这便是调用构造方法来实例化bean对象 在某些情况下,若采用简单 ...
- spring中bean的细节之三种创建Bean对象的方式
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...
- Spring框架----Spring的bean之三种创建bean对象的方式
第一种方式:使用默认构造函数创建 在spring中的配置文件中,使用bean标签,配以id和class属性之后,且没有其他标签时,采用的就是默认构造函数创建bean对象, 此时类中没有默认构造函数,则 ...
- spring 容器中bean的扩展点记录 —— 个人学习记录
在spring容器创建bean的生命周期中,存在很多个可以让我们扩展的口子 1.拿到beanFactory使用beanDefinition创建bean之前,通过实现BeanFactoryPostPro ...
- 将Bean放入Spring容器中的五种方式
欢迎关注方志朋的博客,回复"666"获面试宝典 来源:blog.csdn.net/weixin_43741092/ article/details/120176466 将bean放 ...
- 【Spring 工厂】反转控制与依赖注入、Spring工厂创建复杂对象3种方式
反转控制与依赖注入 反转控制 与 依赖注入 反转控制(IOC Inverse of Control) 依赖注入 (Dependency Injection - DI) Spring工厂创建复杂对象(3 ...
- SpringBoot教程(十一)——将Bean放入Spring容器中的五种方式
将bean放入Spring容器中有哪些方式? 我们知道平时在开发中使用Spring的时候,都是将对象交由Spring去管理,那么将一个对象加入到Spring容器中,有哪些方式呢,下面我就来总结一下 1 ...
- 【spring源码】基于factoryMethod创建bean对象
案例: 1.定义Student类: @Data public class Student {private String name;private Integer age;public Student ...
- Spring注解创建Bean的几种方式
Spring注解创建Bean的几种方式 1.@Component系列 @Component @Service @Repository @Controller @Configuration 2. 依附于 ...
- Spring容器中Bean的作用域
当通过Spring容器创建一个Bean实例时,不仅可以完成Bean实例的实例化,还可以为Bean指定特定的作用域.Spring支持如下5种作用域: singleton:单例模式,在整个Spring I ...
最新文章
- 计算机视觉在生物力学和运动康复中的应用和研究
- 裸设备 linux,Linux平台下裸设备的绑定:
- dataframe 提取月数据_pandas dataframe数据提取的方法
- python的image读取的图片是什么类型的-python如何实现读取并显示图片(不需要图形界面)...
- Binder实用指南(一) - 理解篇
- java.util.concurrent.Exchanger应用范例与原理浅析
- 16 | 基础篇:怎么理解内存中的Buffer和Cache?
- clr 面试_Java中高级面试题及答案
- 串口中断和定时器中断_启士 | 蓝桥杯单片机教程12 中断与定时器 (上)
- yjv是电缆还是电线_电力电缆载流量,都说有这一份最新汇总就够了
- 1月8日 官方ros.org太慢,配置中科院ros镜像源 关于解决Ubuntu 14.04安装ros提示校验错误解决
- Gridview 增加多个空行。
- windows的映射驱动器
- 打砖块python游戏源代码_python制作一个打砖块小游戏
- android fd泄露分析,文件描述符(fd)泄漏排查一篇就够了
- 中国水疗产品行业市场供需与战略研究报告
- Docker创建容器后无法update更新以及Job for docker.service failed because the control……错误
- English trip 自习内容 英语时态
- CSS中内容的剪切属性clip
- php 验证 繁体,验证码上中文字是繁体