一. Bean配置解释
1. 例子
-
<bean id="user" class="com.hjf.pojo.User"> ... </bean>
2. 配置解释
- < bean>: 让IOC容器管理一个具体的对象.
- id: bean的唯一标识
- class: 类的全类名. 通过反射的方式创建对象.
所以类中必须要有无参构造Class cls = Class.forName("com.hjf.pojo.User"); Object obj = cls.newInstance(); //无参数构造器
二. IOC创建对象的方式
1. 通过下标赋值
-
例子
<constructor-arg index="0" value="2"/> <constructor-arg index="1" value="李四"/> <constructor-arg index="2" value="20"/>
-
说明
- index: 构造器参数的下标
- value: 指定属性值
2. 通过类型赋值(不建议使用)
相同类型的参数只允许出现一次, 如果重复, 则无法区分是给哪个参数赋值
-
例子
<bean id="teacher" class="com.hjf.pojo.Teacher"> <property name="id" value="3"/> <property name="name" value="张老师"/> </bean> <bean id="user" class="com.hjf.pojo.User"> <!--方式1: 通过参数的顺序进行赋值--> <constructor-arg type="int" value="3"/> <constructor-arg type="java.lang.String" value="王五"/> <constructor-arg type="com.hjf.pojo.Teacher" ref="teacher" /> </bean>
3. 通过属性名赋值
-
<bean id="user" class="com.hjf.pojo.User"> <constructor-arg name="id" value="4" /> <constructor-arg name="name" value="赵六" /> <constructor-arg name="teacher" ref="teacher" /> </bean>
三. Spring配置
1. 别名
方式一: 通过alias标签
-
配置
<bean id="user" class="com.hjf.pojo.User"> ... </bean> <!-- --> <alias name="user" alias="u" />
-
测试
方式二: 通过name属性
-
配置
<bean id="user" class="com.hjf.pojo.User" name="u1 u2, u3"> <constructor-arg name="id" value="4" /> <constructor-arg name="name" value="赵六" /> <constructor-arg name="teacher" ref="teacher" /> </bean>
-
测试
-
说明:
- name属性可以同时命名多个别名
- 多个别名间可以使用常用的符号分割, 如:“空格”, “逗号”, "分号"等
2. import: 导入配置文件
-
例子
<import resource="beans.xml"/> <import resource="beans2.xml"/> <import resource="beans3.xml"/>
四. 依赖注入
依赖:bean对象的创建依赖于容器
注入:bean对象中的所有属性,由容器来注入
1. 构造器注入
见: IOC创建对象的方式
2. set 方法注入(重点)
1. 说明
-
实体类
@Data @AllArgsConstructor @NoArgsConstructor public class Student { private String name; private Address address; private String[] books; private List<String> hobbies; private Map<String, String> card; private Set<String> games; private Properties info; private String wife; }
-
配置文件
<bean id="address" class="com.hjf.pojo.Address"> <property name="address" value="四川.成都"/> </bean> <bean id="student" class="com.hjf.pojo.Student"> <!-- value: 基本类型 --> <property name="name" value="张三" /> <!-- ref: 引用数据类型 --> <property name="address" ref="address"/> <!-- array-value: 数组 --> <property name="books"> <array value-type="java.lang.String"> <value>三国演义</value> <value>水浒传</value> <value>红楼梦</value> <value>西游记</value> </array> </property> <!-- list-value: 列表 --> <property name="hobbies"> <list> <value>看电影</value> <value>读书</value> <value>听歌</value> </list> </property> <!-- map-value: 字典--> <property name="card"> <map> <entry key="身份证" value="1000001" /> <entry key="学生卡" value="1000002" /> </map> </property> <!-- set-value: 集合--> <property name="games"> <set> <value>王者荣耀</value> <value>LOL</value> <value>吃鸡</value> </set> </property> <!-- props-prop: Properties--> <property name="info"> <props> <prop key="age">18</prop> <prop key="sex">男</prop> </props> </property> <!-- null: null --> <property name="wife"> <null/> </property> </bean>
3. 第三方
1. p命名空间
-
导入配置
xmlns:p="http://www.springframework.org/schema/p"
-
配置文件
<bean id="user4" class="com.hjf.pojo.User" p:id="01" p:name="张三丰" p:teacher-ref="teacher"/>
2. c命名空间
-
导入配置
xmlns:c="http://www.springframework.org/schema/c"
-
配置文件
<bean id="user2" class="com.hjf.pojo.User" c:id="01" c:name="张三丰" c:teacher-ref="teacher"/> <bean id="user3" class="com.hjf.pojo.User" c:_0="02" c:_1="姜子牙" c:_2-ref="teacher"/>
五. bean作用域
1. 单例模式(默认)
- 配置
<bean id="user5" class="com.hjf.pojo.User" scope="singleton" c:id="01" c:name="张三丰" c:teacher-ref="teacher"/>
- 测试
2. 原型模式:
每次从容器中get的时候,都产生一个新对象!
- 配置
<bean id="user6" class="com.hjf.pojo.User" scope="prototype" c:id="01" c:name="张三丰" c:teacher-ref="teacher"/>
- 测试
3. 其他
其余的request、session、application这些只能在web开放中使用!