1 java属性注入(三种方式)
属性注入:创建对象时候,向类里面属性里面设置值
java属性注入的方式介绍(三种方式)
(1)使用set方法注入
(2)使用有参数构造注入
(3)使用接口注入(不用)
3 在spring框架里面,支持前两种方式
(1)set方法注入(重点)
(2)有参数构造注入
2 Spring的属性注入
2.1 使用有参数构造注入属性
public classPropertyDemo1 {
private String username;
public PropertyDemo1(Stringusername) {
this.username = username;
}
public void test1() {
System.out.println("demo1.........."+username);
}
}
2.1.1 参数的名字(重点)—name
<!-- 使用有参数构造注入属性 -->
<bean id="demo" class="spring.property.PropertyDemo1">
<!-- 使用有参构造注入 -->
<constructor-arg name="username" value="小王小马"></constructor-arg>
</bean>
2.1.2 索引—index
根据索引赋值,索引都是以0开头的:
<bean
id="memberBean"class="spring.property.Book">
<constructor-arg index="0"value="刘晓刚" />
<constructor-arg index="1"value="3500"/>
<constructor-arg index="2"ref="dept"/>
<constructor-arg index="3"value="男" />
</bean>
2.1.3 类型—type
这种方法基本上不怎么适用,因为一个类里可以有好几个相同基本类型的变量,很容易就混淆值传给哪一个参数了所以做好不要使用这种方法:
<bean>
<constructor-arg type="Java.lang.String"value="刘晓刚"
<constructor-arg type="java.lang.Double"value="3500" />
<constructor-arg type="www.csdn.spring01.constructor.Dept"ref="dept"/>
<constructor-arg type="java.lang.String"value="男" />
</bean>
2.1.4 直接传值
直接给参数赋值,这种方法也是根据顺序排的,所以一旦调换位置的话,就会出现bug,这种方法已经很原始了
<bean>
<constructor-arg value="刘晓刚" />
<constructor-arg value="3500" />
<constructor-arg ref="dept"/>
<constructor-arg value="男" />
</bean>
<bean id="dept" class="www.csdn.spring01.constructor.Dept" >
<property name="dname" value="北航"/>
<property name="deptno" value="00001"/>
</bean>
2.2 使用set方法注入属性(重点)
public classBook {
private String bookname;
//set方法
public void setBookname(Stringbookname) {
this.bookname = bookname;
}
public void demobook() {
System.out.println("book..........."+bookname);
}
}
<!-- 使用set方法注入属性 -->
<bean id="book" class="spring.property.Book">
<!-- 注入属性值
name属性值:类里面定义的属性名称
value属性:设置具体的值 -->
<property name="bookname" value="易筋经"></property>
</bean>
3 注入类型
3.1 对象类型属性(重点)
1 创建service类和dao类
在service得到dao对象;在service里面得到dao类对象,才能调用dao里面的方法
2 具体实现过程
(1)在service里面把dao作为类型属性
(2)生成dao类型属性的set方法
(3)配置文件中注入关系
<!-- 注入对象类型属性 -->
<!-- 1 配置dao对象 -->
<bean id="userDao" class="spring.dao.UserDao"></bean>
<!-- 2配置service -->
<bean id="userService" class="spring.sevrvice.UserService">
<!-- 注入dao对象
name属性值:service类里面属性名称
现在不要写value属性,因为刚才是字符串,现在是对象
写ref属性:dao配置bean标签中id值 -->
<property name="userDao" ref="userDao"></property>
</bean>
3.2 null 值和级联属性
可以使用专用的<null/> 元素标签为 Bean 的字符串或其它对象类型的属性注入 null 值
和 Struts、Hiberante 等框架一样,Spring 支持级联属性的配置。
<null/>意义不大,
<bean id="car"class=" spring.beans.Car">
<property name="brand" value="BMW"/>
<property name="color" value="Black"/>
<property name="price" value="800000"/>
<property name="maxSpeed" value="200"/>
</bean>
<!-- 级联属性 -->
<bean id= "person3"class = "spring.beans.Person" >
<constructor-arg value= "杰瑞"></constructor-arg>
<constructor-arg value= "25"></constructor-arg>
<constructor-arg ref="car"></constructor-arg>
<!-- 为级联属性赋值,注意:属性必须先初始化后,才可以为级联属性赋值,否则会异常 -->
<property name="car.maxSpeed" value="300"></property>
</bean>
3.3 复杂类型属性
1 数组
2 list集合
3 map集合
4properties类型
<!-- 注入复杂类型属性值 -->
<bean id="person" class="spring.property.Person">
<!-- 数组 -->
<property name="arrs">
<list>
<value>小王</value>
<value>小马</value>
<value>小宋</value>
</list>
</property>
<!-- list -->
<property name="list">
<list>
<value>小奥</value>
<value>小金</value>
<value>小普</value>
</list>
</property>
<!-- map -->
<property name="map">
<map>
<entry key="aa" value="lucy"></entry>
<entry key="bb" value="mary"></entry>
<entry key="cc" value="tom"></entry>
</map>
</property>
<!-- properties -->
<property name="properties">
<props>
<prop key="driverclass">com.mysql.jdbc.Driver</prop>
<prop key="username">root</prop>
</props>
</property>
</bean>
4 注入类型简化--P名称空间
pname为对象属性