一、设值注入
使用<bean>元素定义一个组件
- id属性:指定一个用来访问的唯一名称
- name属性:指定多个别名,名字之间使用逗号、分号或空格进行分隔
<!-- User。定义User bean,该bean的id是user ,class指定该bean实例的实现类-->
<!-- 设值注入,也可以通过name获取,name可以设置多个值,用逗号隔开-->
<bean id="user" class="cn.gwj.entity.User" name="t1,t2">
<!-- property元素用来为实例的属性赋值,此处实际是调用setuserName()方法实现赋值操作 -->
<!-- 此处将字符串"张三"赋值给userName属性 -->
<property name="userName" value="张三"/>
<property name="gender" value="0"/>
<!-- 通过ref属性注入已经定义好的bean-->
<property name="role" ref="role0"/>
</bean>
二、构造注入
1.对比设值注入和构造注入的区别
2.在Spring配置文件中通过<constructor-arg>元素为构造方法传参
<bean id="userDao" class="dao.impl.UserDaoImpl" /> <
bean id="userService" class="service.impl.UserServiceImpl">
<constructor-arg><ref bean="userDao" /></constructor-arg>
</bean>
注意
1、一个<constructor-arg>元素表示构造方法的一个参数,且使用时不区分顺序。
2、通过<constructor-arg>元素的index 属性可以指定该参数的位置索引,位置从0 开始。
3、<constructor-arg>元素还提供了type 属性用来指定参数的类型,避免字符串和基本数据类型的混淆。
3.实例
<bean id="userDao" class="cn.gwj.dao.UserDaoImpl"/>
<bean id="userService" class="cn.gwj.service.user.UserServiceImpl">
<constructor-arg type="java.lang.String" index="1" value="zs"/>
<!--构造注入 给构造方法传入参数 userDao -->
<constructor-arg type="cn.gwj.dao.UserDao" index="0" ref="userDao"/>
</bean>
package cn.gwj.service.user;
import cn.gwj.dao.UserDao;
public class UserServiceImpl implements UserService{
private UserDao userDao;
private String name;
public UserServiceImpl() {}
public UserServiceImpl(UserDao userDao, String name){
this.userDao=userDao;
this.name=name;
}
public String add(String name){
System.out.println("add方法");
return "添加了"+name;
}
}
三、使用p命名空间注入属性值
1、 p 命名空间的特点:
使用属性而不是子元素的形式配置Bean的属性,从而简化了配置代码
2.语法
对于直接量(基本数据类型、字符串)属性:p:属性名="属性值"
对于引用Bean的属性:p:属性名-ref="Bean的id"
- 使用前要先要在Spring配置文件中引入p命名空间
xmlns:p="http://www.springframework.org/schema/p"
- 使用p命名空间注入属性值
<bean id="user" class="entity.User" p:age="23" p:username="张三" p:email="zhangsan@xxx.com" />
<bean id="userService" class="service.impl.UserServiceImpl" p:dao-ref="userDao" />
- p命名空间也是通过setter方法注入属性值
四、注入不同数据类型
五、