spring ioc(使用xml配置)|bean标签及其子标签
Bean标签的属性
-
id: 给对象在容器中提供一个唯一标识。用于获取对象。
-
class: 指定类的全限定类名。用于反射创建对象。默认情况下调用无参构造函数。
-
scope: 指定对象的作用范围。
-
singleton :默认值,单例的.
单例模式的bean对象生命周期与容器相同,容器创建的时候,对象就跟着创建了 -
prototype :多例的.
当使用对象时,创建新的对象实例。只要对象在使用中,就一直活着。当对象长时间不用时,被 java 的垃圾回收器回收了。 -
request :WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 request 域中.
-
session :WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 session 域中.
-
-
init-method: 指定类中的初始化方法名称。
-
destroy-method: 指定类中销毁方法名称
实例化bean的三种方式
方式1: Spring 使用默认无参构造函数
<bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"/>
方式2: Spring 管理静态工厂-使用静态工厂的方法创建对象
- id 属性: 指定 bean 的 id,用于从容器中获取
- class 属性: 指定静态工厂的全限定类名
- factory-method 属性: 指定生产对象的静态方法
<bean
id="accountService"
class="com.itheima.factory.StaticFactory"
factory-method="createAccountService">
</bean>
方式3: spring 管理实例工厂-使用实例工厂的方法创建对象
- factory-bean 属性: 用于指定实例工厂 bean 的 id。
- factory-method 属性: 用于指定实例工厂中创建对象的方法
<bean id="instanceFactory" class="com.itheima.factory.InstanceFactory"></bean>
<bean id="accountService"
factory-bean="instanceFactory"
factory-method="createAccountService">
</bean>
子标签(用于依赖注入)
就是给bean对象注入其成员变量
使用构造函数方式 注入 | constructor-arg
标签
前提是要有有根据配置的参数所对应的构造函数才能使用
- 属性
index:指定参数在构造函数参数列表的索引位置 type:指定参数在构造函数中的数据类型 name:指定参数在构造函数中的名称 用这个找给谁赋值 ========上面三个都是赋值给谁,下面两个指的是赋什么值的======== value:它能赋的值是基本数据类型和 String 类型 ref:它能赋的值是其他 bean 类型,也就是说,必须得是在配置文件中配置过的 bean
- eg
<constructor-arg name="name" value="zhang3"></constructor-arg>
使用set方法方式 注入 | property
标签
- 属性
- name: 找的是类中 set 方法后面的部分
- value: 给属性赋值是基本数据类型和 string 类型的
- ref: 给属性赋值是其他 bean 类型的
- eg
<property name="name" value="lisi"></property>
注入集合属性
注入集合数据, 在注入集合数据时,只要结构相同,标签可以互换
- List 结构的:array,list,set
- Map 结构的: map,entry; props,prop
eg:
- pojo
public class A { private String[] myStrs; private List<String> myList; private Set<String> mySet; private Map<String,String> myMap; private Properties myProps; public void setMyStrs(String[] myStrs) this.myStrs = myStrs; } public void setMyList(List<String> myList) { this.myList = myList; } public void setMySet(Set<String> mySet) { this.mySet = mySet; } public void setMyMap(Map<String, String> myMap) { this.myMap = myMap; } public void setMyProps(Properties myProps) { this.myProps = myProps; } }
- xml文件
<bean id="a" class="com.kehao.A"> <!--数组--> <property name="myStrs"> <array> <value>aaa</value> <value>bbb</value> <value>ccc</value> </array> </property> <!--list集合--> <property name="myList"> <list> <value>javase</value> <value>mysql</value> <value>javaweb</value> </list> </property> <!--set集合--> <property name="mySet"> <set> <value>北京</value> <value>上海</value> <value>南京</value> </set> </property> <!--map集合--> <property name="myMap"> <map> <entry key="aaa" value="你好"></entry> <entry key="bbb" value="hello"></entry> <entry key="ccc" value="Hi"></entry> </map> </property> <!--properties集合--> <property name="myProps"> <props> <prop key="111">哈哈</prop> <prop key="222">嘿嘿</prop> <prop key="333">呵呵</prop> </props> </property> </bean> </bean>