【javaWeb补充篇配置Bean】XML配置Bean

XML配置bean

  • 配置Bean
    • Bean的声明周期
      • bean的销毁时机
    • 依赖注入方式
    • 自动装配
    • 集合注入
    • 加载properties文件
    • 容器类层次结构图

配置Bean

以配置文件的形式配置Bean
在资源目录下创建.xml文件进行对Bean的配置
在创建文件之前还首先需要引入spring中spring-context的依赖

		<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId></dependency>

在XML文件之中配置bean

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="deptServiceimpl" class="com.example.service.impl.DeptServiceimpl"></bean>
</beans>

然后在类中获取bean:

   public static void main(String[] args) {//获取IOC容器ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");//获取BeanDeptService deptServiceimpl = (DeptService) ctx.getBean("deptServiceimpl");}
  • bean别名配置

别名
通过name属性设置多个别名

  • bean作用范围的配置

作用范围

  • 通过静态工厂进行bean的实例化:

手写一个实例化工厂

public class OrderDaoFactory{
public static OrderDao getOrderDao(){return new OrderDaoImpl();
}
}

再在该xml文件中引入该静态实例化bean的方法

<beanid="orderDao"factory-method="getOrderDao"class="class.itheima.factory.OrderDaoFactory"
  • 使用FactoryBean实例化bean
public class UserDaoFactoryBean implements FactoryBean<UserDao>{
//代替原始实例工厂创建对象的方法
public UserDao getObject() throws Exception{return new UserDaoImpl();
}
public Class<?> getObjectType(){return UserDao.class;
}
}

在配置文件当中xml

<bean id="userDao" class="com.itheima.factory.UserDaoFactoryBean"/>

Bean的声明周期

  • 初始化容器:
  1. 创建对象(内存分配)
  2. 执行构造方法
  3. 执行属性注入(set操作)
  4. 执行bean初始化方法
  • 使用bean

执行业务操作

  • 关闭/销毁容器
  1. 执行bean的销毁方法

bean的销毁时机

容器关闭前触发bean的销毁
关闭容器方式:
ConfigurableApplicationContext接口close()操作
注册关闭钩子,在虚拟机退出前关闭容器再退出虚拟机
configurableApplicationContext接口registerShutdownHook()操作

依赖注入方式

  • setter注入

简单类型,引用类型

在实体类中如何通过setter来配置属性:

public class BookDaoImpl implements BookDao{
private int connetionNum;
public void setconnetionNum(int connetionNum){
this.connetionNum=connetionNum;
}
}

在这个实体类中给出了属性对应的set方法,在对应的bean的xml中给出响应的配置即可

<bean id="bookDao" class="....">
<property name="connectionNum" value="100"/>
</bean>

这样就对简单类型做出了响应的依赖注入

  • 构造器注入

简单类型,引用类型

对简单类型在实体类通过构造器进行注入:

public class BookDaoImpl implements BookDao{
private int connetionNum;
public void setconnetionNum(int connetionNum){
this.connetionNum=connetionNum;
}
}

在对应的xml文件中进行配置

<bean id="bookDao" class="....">
<constructor-arg name="bookDao" ref="bookDao"/>
</bean>//可以
<bean id="bookDao" class="....">
<constructor-arg name="databaseName" value="mysql"/>
</bean>

注意第一个name中是构造器中的形参
但是这样进行配置会导致配置文件与代码的耦合度非常的高
我们可以略加修改:

<bean id="bookDao" class="....">
<constructor-arg type="java.long.String" value="mysql"/>
</bean>

这样就解决了文件之间的耦合问题,但是如果存在多个类型相同的参数,应该怎么办呢,我们略作修改

<bean id="bookDao" class="....">
<constructor-arg index="0" value="mysql"/>
<constructor-arg index="1" value="dad"/>
</bean>

通过参数所在的位置来进行注解能很好的改变这一问题

自动装配

通过XML文件实现对类的自动装配

<bean id="bookDao" class="...."/>
<bean id="bookService" class="..." autowire="byType"/>

通过bean中的autowire属性进行类型注入

  • 依赖自动装配特征
  1. 自动装配用于引用型类型依赖注入,不能对简单类型进行操作
  2. 使用按类型装配时(byType)必须保障容器中相同类型的bean唯一,推荐使用
  3. 使用按名称装配时(byname)必须保障容器中具有相同指定名称的bean,因变量名与配置耦合,不推荐使用
  4. 自动装配优先级低于setter注入与构造器注入,同时出现时自动装配配置失效

集合注入

在实体类中创建集合类型的依赖注入

public class BookDaoImpl implements BookDao{
private int[] array;
private List<String> list;
public void setArray(int[] array){
this.array=array;
}}

在xml文件中给出相应的配置:

<bean id="bookDao" class="..."><property name="array"><array><value>100</value><value>100</value></array></property>  
</bean>

list集合的配置形式与其相同,Map的配置形式

<bean id="bookDao" class="..."><property name="map"><map><entry key="" value=""/></map></property>  
</bean>

对于properties的xml配置类型如下:

<bean id="bookDao" class="..."><property name="properties"><props><prop key="">ssss</prop></props></property>  
</bean>

加载properties文件

在spring中加载外部的properties文件:

需要在xml文件中开辟新的空间(命名空间)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"">

如何加载properties文件

<context:property-placeholder location="properties文件"/>

如何使用文件中的属性名:

<bean class="....."><property name="..." value="${文件中的属性名}"> 
</bean>

如何加载多份properties文件:

<context : property-placeholder location="classpath:*.properties" system-properties-mode="NEVER"/>
//从类路径或jar包中搜索并加载properties文件
<context : property-placeholder location="classpath*:*.properties" system-properties-mode="NEVER"/>

后边的标签属性system-properties-mode表示不加载系统属性

容器类层次结构图

在这里插入图片描述
BeanFactory创建完毕后,所有的bean均为延迟加载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/597741.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入研究:我国工业实时操作系统的核心技术与演进路径

实时操作系统&#xff08;RTOS&#xff09;在各类工业场景中发挥着中枢神经系统的关键作用&#xff0c;是数字化工业的重要基础。当前&#xff0c;全球大部分工业实时操作系统市场被国外厂商占据&#xff0c;围绕主流RTOS产品内核提供了完备的上下游软件配套&#xff0c;并以嵌…

RTX RTOS 操作实例分析之---线程(thread)

0 Preface/Foreword 1 线程&#xff08;thread&#xff09; 1.1 线程定义 1.1.1 USE_BASIC_THREADS&#xff08;宏定义&#xff09; 经过以上步骤&#xff08;makefile包含&#xff09;&#xff0c;USE_BASIC_THREADS在编译阶段被定义到相应的模块中。 1.1.2 定义线程ID变量…

开启虚拟机时出现此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态怎么解决

问题描述 虚拟机安装完成后&#xff0c;点击开启此虚拟机弹出系统提示 原因分析&#xff1a; Intel VT-x 处于禁用状态&#xff0c;需要开启。 解决方案&#xff1a; 以联系小新笔记本电脑为例&#xff0c;进入BIOS界面&#xff0c;将Intel Virtual Technology设置成Enabl…

什么是物联网云平台

在信息化和智能化浪潮的推动下&#xff0c;物联网云平台作为连接物理世界与数字世界的桥梁&#xff0c;正日益成为企业数字化转型的关键支撑。物联网云平台通过集成先进的云计算、大数据分析和人工智能等技术&#xff0c;为企业提供了高效、安全、智能的数据处理和应用服务&…

主食冻干哪个牌子好?热门大牌真实实测分享,轻松避雷!

在选购主食冻干时&#xff0c;很多铲屎官都面临着选进口还是国产的难题。很多铲屎官认为进口产品在品控和配方上更优秀&#xff0c;但实际营养指标却逊于国产&#xff0c;价格也不菲。所以不免选购时会犹豫&#xff0c;最后抱着试一试的心态盲入主食冻干&#xff0c;运气好&…

【C语言】_文件类型,结束判定与文件缓冲区

目录 1. 文本文件和二进制文件 2. 文件读取结束的判定 3. 文件缓冲区 1. 文本文件和二进制文件 根据数据的组织形式&#xff0c;数据文件被称为文本文件或二进制文件&#xff1b; 数据在内存中以二进制的形式存储&#xff0c;如果不加转换地输出到外存&#xff0c;就是二进…

体验OceanBase 的binlog service

OceanBase对MySQL具备很好的兼容性。目前&#xff0c;已经发布了开源版的binlog service工具&#xff0c;该工具能够将OceanBase特有的clog模式转换成binlog模式&#xff0c;以便下游工具如canal、flink cdc等使用。今天&#xff0c;我们就来简单体验一下这个binlog service的功…

Bigtable [OSDI‘06] 论文阅读笔记

原论文&#xff1a;Bigtable: A Distributed Storage System for Structured Data (OSDI’06) 1. Introduction Bigtable 是一种用于管理结构化数据的分布式存储系统&#xff0c;可扩展到非常大的规模&#xff1a;数千台服务器上的数据量可达 PB 级别&#xff0c;同时保证可靠…

外汇110:外汇交易不同货币类别及交易注意事项!

外汇市场是一个庞大而复杂的市场&#xff0c;其中有各种各样的货币品种。对于外汇投资者来说&#xff0c;了解外汇品种的特性和走势是比较重要的。1. 货币种类 外汇市场中的货币品种可以分为主要货币、次要货币和外围货币。 主要货币&#xff1a;主要指美元、欧元、英镑、日元、…

(免费分享)基于springboot,vue问卷调查系统

用户注册、用户登录、创建调查问卷、编辑问卷问题和选型&#xff08;支持题型&#xff1a;单选、多选、单行文本、多行文本、数字、评分、日期、文本描述&#xff09;、保存和发布问卷、停止问卷调查、游客填写调查问卷&#xff08;一个IP地址只能填写一次&#xff09; 技术&a…

Jmeter/postman/python三大主流技术如何操作数据库?

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 1、前言 只要是做测试工作的&#xff0c;必然会接触到数据库&a…

【微服务】SpringCloud之Feign远程调用

&#x1f3e1;浩泽学编程&#xff1a;个人主页 &#x1f525; 推荐专栏&#xff1a;《深入浅出SpringBoot》《java对AI的调用开发》 《RabbitMQ》《Spring》《SpringMVC》《项目实战》 &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录 …