Spring(二)
IOC创建对象方式
-
使用无参构造创建,默认!
<bean id="user" class="com.SpringTest.pojo.User"> <property name="name" value="神"></property> </bean>
-
有参构造创建对象
-
下标赋值
<!--第一种 下标赋值--> <bean id="user" class="com.SpringTest.pojo.User"> <constructor-arg index="0" value="神"/> </bean>
-
通过类型创建(不建议使用)
<!--第二种 通过类型赋值--> <bean id="user" class="com.SpringTest.pojo.User"> <constructor-arg type="java.lang.String" value="神"/> </bean>
-
直接通过参数名
<!--第三种 直接通过参数名赋值--> <bean id="user" class="com.SpringTest.pojo.User"> <constructor-arg name="name" value="神"/> </bean>
总结:在配置文件加载的时候,容器中管理的对象就已经初始了
-
Spring 配置
别名:
<!--别名: alias
name: 原名
alias: 别名
-->
<alias name="user" alias="user2"/>
Bean的配置:
id : bean 的唯一标识
class:bean对象所对应权限命名:包名 + 类型
name: 也是别名,而且name可以同时取多个别名
<bean id="user" class="com.SpringTest.pojo.User" name="user3">
import:
这个import,一般用于团队开发使用,他可以将多个配置文件,导入合并为一个
<import resource="Beans.xml"/>
<import resource="Beans1.xml"/>
<import resource="Beans2.xml"/>
<import resource="Beans3.xml"/>
<import resource="Beans4.xml"/>
DI依赖注入
- 构造器注入
- set方式注入
- 拓展注入
Set方式注入
-
依赖注入(Set注入)
- 依赖:bean对象的创建依赖于容器
- 注入:bean对象中的所有属性、由容器来注入
环境搭建:
- 复杂类型(Address)
- 真实测试对象(student)
- beans.xml
- 测试类
-
注入:
-
普通注入
<!--第一种:普通注入--> <bean id="student" class="com.SpringTest.DI.Student"> <property name="name" value="神"/> </bean>
-
Bean注入 ref
<bean id="address" class="com.SpringTest.DI.Address"/> <bean id="student" class="com.SpringTest.DI.Student"> <!--第一种:普通注入--> <property name="name" value="神"/> <!--第二种:Bean注入 ref--> <property name="address" ref="address"/> </bean>
-
数组注入
<bean id="address" class="com.SpringTest.DI.Address"/> <!--第三种:数组注入 --> <property name="books"> <array> <value>红楼梦</value> <value>水浒传</value> <value>西游记</value> <value>三国演义</value> </array> </property> </bean>
-
List 注入
<bean id="student" class="com.SpringTest.DI.Student"> <!--第四种:List注入 ref--> <property name="hobbies"> <list> <value>听歌</value> <value>敲代码</value> <value>看电影</value> </list> </property> </bean>
-
Map注入
<bean id="student" class="com.SpringTest.DI.Student"> <!--第五种:map注入 --> <property name="card"> <map> <entry key="身份证" value="111111"/> <entry key="银行卡" value="1232123131"/> </map> </property> </bean>
-
Set注入
<bean id="student" class="com.SpringTest.DI.Student"> <!--第六种:set注入 --> <property name="games"> <set> <value>LOL</value> <value>COC</value> <value>BOB</value> </set> </property> </bean>
-
null注入
<!--第七种:Null注入 --> <property name="wife"> <null/> </property>
-
property注入
<!--第八种:property注入 ref--> <property name="info"> <props> <prop key="driver">99999</prop> <prop key="url">男</prop> <prop key="username">root</prop> <prop key="password">123456</prop> </props> </property>
结果:
Student{name='神', address=Address{address='西安'}, books=[红楼梦, 水浒传, 西游记, 三国演义], hobbies=[听歌, 敲代码, 看电影], card={身份证=111111, 银行卡=1232123131}, games=[LOL, COC, BOB], wife='null', info={password=123456, url=男, driver=99999, username=root}}
-
p命名空间可以直接注入属性的值
<!--p 注入--> <bean id="user" class="com.SpringTest.pojo.User" p:name="神"/>
-
c命名空间通过构造器注入
<!--c 注入--> <bean id="user" class="com.SpringTest.pojo.User" c:name="神"/>
注意:p命名和c命名空间不能直接使用,需要导入xml的约束
<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" xmlns:c="http://www.springframework.org/schema/c" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">
-