标签:允许 sch 不能 参数 dex beans each 初始 alias
IoC的配置是通过Spring的xml文件的bean标签进行的。
bean标签一般是在xml文件进行配置的,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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>
可在其中进行bean标签的配置。
bean标签用于配置被spring容器管理的bean的信息
注意:bean标签配置的bean的创建默认是调用无参数的构造方法,若没有无参构造方法则不能创建成功。
lazy-init="true"
使得Ioc容器在第一次需要bean的时候进行实例化。示例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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="wanger" class="com.luis.dto.Person"></bean>
<bean id="zhangsan" class="com.luis.dto.Person" init-method="init" destroy-method="over"></bean>
<bean id="lisi" class="com.luis.dto.Person" scope="prototype"></bean>
<bean id="lazy" class="com.luis.dto.Person" lazy-init="true"/></beans>
<bean name="address" class="com.luis.dto.Address"></bean>
</beans>
注意:id和name的区别
Bean标签提供了两种标识Bean的Attribute:id和name
示例代码如下:
<bean id="person" class="com.luis.dto.Student"></bean>
<bean name="person" class="com.luis.dto.Teacher"></bean>
<!-- factory.getBean(“person”)返回的是Teacher对象-->
若置bean的时候并没有声明ID属性,则采用全类限定名作为bean的id,此时称为匿名bean
<bean class="com.learnSpring.hellWorld"/>
<bean class="com.learnSpring.hellWorld"/>
<bean class="com.learnSpring.hellWorld"/>
如果存在多个class属性都是一样的匿名的Bean,则根据Spring读取配置文件的顺序生成id。
"com.learnSpring.hellWorld"
"com.learnSpring.hellWorld#0"
"com.learnSpring.hellWorld#1"
我们可在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"
bean有三种实例化方式:无参构造、静态工厂、实例工厂
默认情况下会根据无参构造方法进行对象的实例化。
若没有无参构造方法则会创建失败。
<bean id="wanger" class="com.luis.dto.Person"></bean>
使用静态工厂创建实例,其中:
<bean id="person" class="com.luis.factory.StaticFactory" factory-method="createPerson"/>
将工厂的创建交给Spring进行,使用工厂bean调用方法创建实例化对象。其中:
<bean id="instancFactory" class="com.luis.factory.PersonFactory"/>
<bean id="person" factory-bean="instancFactory" factory-method="createPerson"/>
依赖注入(Dependency Injection)是 spring 框架核心 IoC 的具体实现。依赖指的是bean的属性,包括:简单类型(8种基本类型和String类型)的属性、POJO类型的属性、集合数组类型的属性。我们通过控制反转将实例化对象的交给IoC进行,但创建的对象没有依赖,因而需要Spring维护依赖关系,即依赖注入。
使用类中的构造函数,给成员变量赋值,,通过在xml文件中的bean进行配置的方式给对象赋值。
构造方法注入涉及的标签:
constructor-arg
index:指定参数在构造函数参数列表的索引位置
name:指定参数在构造函数中的名称
value:它能赋的值是基本数据类型和 String 类型
ref:它能赋的值是其他 bean 类型,且必须是在配置文件中配置过的 bean
Spring配置文件xml中的配置如下:
<bean id="zhangsan" class="com.luis.dto.Person">
<constructor-arg name = "name" value ="张三"></constructor-arg>
<constructor-arg name = "age" value ="22"></constructor-arg>
</bean>
<bean id="zhangsan" class="com.luis.dto.Person">
<constructor-arg index = "0" value ="张三"></constructor-arg>
<constructor-arg index = "1" value ="22"></constructor-arg>
</bean>
set方法注入又分为手动装配方式注入和自动装配方式注入。
通过bean标签的子标签property来完成,且需要在在类中指定setter方法。
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中的配置如下:
<bean name="address" class="com.luis.dto.Address">
<property name = "country" value ="中国"></property>
<property name = "city" value ="西安"></property>
</bean>
可以简写为:
<bean id="address" class="com.luis.dto.Address" p:country="中国" p:city="西安"></bean>
p名称注入是set方法的一种简写方式,首先需引入p命名空间:
xmlns:p="http://www.springframework.org/schema/p"
p名称空间的语法:p:属性名 = ""
和 p:属性名-ref = ""
上面的set注入可以简写为:
<bean id="address" class="com.luis.dto.Address" p:country="中国" p:city="西安"></bean>
若对象中有引用对象,则:
<bean name="address" class="com.luis.dto.Address"></bean>
<bean id="person" class="com.luis.dto.Person" p:pname="田七" p:age="22" p:address-ref="address"/>
<!-- 构造方法注入 -->
<bean id="lisi" class="com.luis.dto.Person">
<constructor-arg name = "name" value ="李四"></constructor-arg>
<constructor-arg name = "age" value ="22"></constructor-arg>
</bean>
<!-- 构造方法注入 -->
<bean id="wangwu" class="com.luis.dto.Person">
<constructor-arg index = "0" value ="王五"></constructor-arg>
<constructor-arg index = "1" value ="22"></constructor-arg>
</bean>
<!-- set方法注入 -->
<bean name="address" class="com.luis.dto.Address">
<property name = "country" value ="中国"></property>
<property name = "city" value ="西安"></property>
</bean>
<!-- p空间名称注入 -->
<bean id="address" class="com.luis.dto.Address" p:country="中国" p:city="西安"></bean>
<bean id="address" class="com.luis.dto.Address">
<property name = "country" value ="中国"></property>
<property name = "city" value ="西安"></property>
</bean>
<!-- 构造方法注入 -->
<bean id="zhaoliu" class="com.luis.dto.Person">
<constructor-arg index = "0" value ="赵六"></constructor-arg>
<constructor-arg index = "1" value ="22"></constructor-arg>
<constructor-arg index = "2" ref ="address"></constructor-arg>
</bean>
<!-- set方法注入 -->
<bean id="tianqi" class="com.luis.dto.Person">
<property name = "name" value ="田七"></property>
<property name = "age" value ="22"></property>
<property name = "address" ref ="address"></property>
</bean>
<!-- p空间名称注入 -->
<bean id="person" class="com.luis.dto.Person" p:pname="田七" p:age="22" p:address-ref="address"/>
不同的集合类型,注入方式也有所区别:
1、数组或List集合
<bean id="person" class="com.luis.dto.Person">
<property name="arrs">
<list>
<!-- 如果集合内是简单类型,使用value子标签,如果是POJO类型,则使用bean标签 -->
<value>张三</value>
<value>李四</value>
<!-- <bean></bean> -->
</list>
</property>
</bean>
2、Set集合
<property name="sets">
<set>
<!-- 如果集合内是简单类型,使用value子标签,如果是POJO类型,则使用bean标签 -->
<value>张三</value>
<value>李四</value>
</set>
</property>
3、Map集合
<property name="map">
<map>
<entry key="张三" value="38"/>
<entry key="李四" value="38"/>
<entry key="王五" value="29"/>
</map>
</property>
4、Properties集合
<property name="pro">
<props>
<prop key="uname">root</prop>
<prop key="pass">123</prop>
</props>
</property>
标签:允许 sch 不能 参数 dex beans each 初始 alias
原文地址:https://www.cnblogs.com/liuyi6/p/10217096.html