Spring基于XML方式的使用

一、IoC配置 IoC的配置是通过Spring的xml文件的bean标签进行的。 1、bean标签介绍 bean标签一般是在xml文件进行配置的,xml文件一般样式如下: 可在其中进行bean标签的配置。 1.1、bean标签的作用 bean标签用于配置被spring容器管理的bean的信息 注意:bean标签配置的bean的创建默认是调用无参数的构造方法,若没有无参构造方法则不能创建成功。 1.2、bean标签属性 id:给对象在容器中提供一个唯一标识。用于获取对象。 class:指定类的全限定名。用于反射创建对象。默认情况下调用无参构造函数。 scope:指定对象的作用范围。 singleton:默认值,单例的(在整个容器中只有一个对象). prototype:多例的 request:将Spring 创建的 Bean 对象存入到 request 域中. session:将Spring 创建的 Bean 对象存入到 session 域中. global session:WEB 项目中,应用在 Portlet 环境.如果没有 Portlet 环境那么globalSession 相当于 session。 init-method:指定类中的初始化方法名称。 destroy-method:指定类中销毁方法名称。比如DataSource的配置中一般需要指定destroy-method=“close”。 lazy-init:ApplicationContext实现的默认行为就是在启动时将所有 singleton bean进行实例化。lazy-init可以延迟初始化,设置lazy-init="true"使得Ioc容器在第一次需要bean的时候进行实例化。 示例xml代码如下: 注意:id和name的区别 Bean标签提供了两种标识Bean的Attribute:id和name id用来标识bean,是唯一的,且只有一个,只允许以字母开头,其后只能为字母或数字或”-“。 name定义的是bean的alias,可以有多个,并可能与其他的bean重名,name允许特殊字符。 当多个重名的name同时存在时,先产生的bean会被后产生的bean覆盖 当id和name的值相同,通过值获取bean得到的是name对应的bean。 示例代码如下: 若置bean的时候并没有声明ID属性,则采用全类限定名作为bean的id,此时称为匿名bean 如果存在多个class属性都是一样的匿名的Bean,则根据Spring读取配置文件的顺序生成id。 "com.learnSpring.hellWorld" "com.learnSpring.hellWorld#0" "com.learnSpring.hellWorld#1" 1.3、bena标签作用范围 我们可在xml文件中通过bean标签的scope属性指定作用域,其取值区别如下表: 作用域 描述 singleton 单例模式,singleton是默认的作用域,当定义Bean时没有指定scope配置项,Bean的作用域被默认为singleton。singleton属于单例模式,在整个系统上下文环境中,仅有一个Bean实例。 prototype 原型模式,当一个Bean的作用域被定义prototype时,程序每次从IOC容器获取的Bean都是一个新的实例。 request http请求,bean作用于HTTP request生命周期,每个request有通过bean创建的实例。 session 会话,bean作用于session生命周期。 global-session 全局会话,bean作用于全局的session生命周期。 参考了:https://www.cnblogs.com/best/p/5727935.html 这里主要对单例对象与多例对象进行说明: 单例对象:scope="singleton" 一个应用只用一个实例对象 生命周期与容器相关,当容器创建时对象产生,当对象销毁时对象销毁。 多例对象:scope="prototype" 每次访问对象时,都会重新创建对象实例。 生命周期与使用有关,当需要使用时创建对象,当对象长时间不使用,则被垃圾回收机制进行回收。 2、bean的实例化 bean有三种实例化方式:无参构造、静态工厂、实例工厂 2.1、无参构造 默认情况下会根据无参构造方法进行对象的实例化。 若没有无参构造方法则会创建失败。 2.2、静态工厂 使用静态工厂创建实例,其中: id 属性:指定 bean 的 id,用于从容器中获取 class 属性:指定静态工厂的全限定类名 factory-method 属性:指定生产对象的静态方法 2.3、实例工厂 将工厂的创建交给Spring进行,使用工厂bean调用方法创建实例化对象。其中: factory-bean 属性:用于指定实例工厂 bean 的 id。 factory-method 属性:用于指定实例工厂中创建对象的方法。 二、DI配置 依赖注入(Dependency Injection)是 spring 框架核心 IoC 的具体实现。依赖指的是bean的属性,包括:简单类型(8种基本类型和String类型)的属性、POJO类型的属性、集合数组类型的属性。我们通过控制反转将实例化对象的交给IoC进行,但创建的对象没有依赖,因而需要Spring维护依赖关系,即依赖注入。 1、依赖注入的方式 1.1、构造方法注入 使用类中的构造函数,给成员变量赋值,,通过在xml文件中的bean进行配置的方式给对象赋值。 构造方法注入涉及的标签: constructor-arg index:指定参数在构造函数参数列表的索引位置 name:指定参数在构造函数中的名称 value:它能赋的值是基本数据类型和 String 类型 ref:它能赋的值是其他 bean 类型,且必须是在配置文件中配置过的 bean Spring配置文件xml中的配置如下: 使用参数名称指定参数 通过索引指定参数 1.2、set方法注入 set方法注入又分为手动装配方式注入和自动装配方式注入。 手动装配 通过bean标签的子标签property来完成,且需要在在类中指定setter方法。 自动装配(注解方式进行),会在Spring的注解使用进行说明 @Autowired: 作用一:查找实例,从spring容器中根据Bean的类型(byType)获取实例。 作用二:赋值,将找到的实例,装配给另一个实例的属性值。 注意事项:一个Java类型在同一个spring容器中,只能有一个实例 @Resource: 作用一:查找实例,从spring容器中根据Bean的名称(byName)获取实例。 作用二:赋值,将找到的实例,装配给另一个实例的属性值。 xml方式的示例代码如下: public class Address { private String country; private String city; public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } @Override public String toString() { return "Address [country=" + country + ", city=" + city + "]"; } } Spring配置文件xml-ioc-01.xml中的配置如下: 可以简写为: 1.3、p空间名称注入 p名称注入是set方法的一种简写方式,首先需引入p命名空间: xmlns:p="http://www.springframework.org/schema/p" p名称空间的语法:p:属性名 = "" 和 p:属性名-ref = "" 上面的set注入可以简写为: 若对象中有引用对象,则: 2、不同属性依赖注入 2.1、简单类型 2.2、引用类型 2.3、集合类型 不同的集合类型,注入方式也有所区别: 1、数组或List集合 张三 李四 2、Set集合 张三 李四 3、Map集合 4、Properties集合 root 123 作者:紫焱 出处:http://www.cnblogs.com/liuyi6/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。 标签: Springhttps://www.cnblogs.com/liuyi6/p/10217096.html
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信