1,set注入方式:比较常用,比较简单(推荐)
(1)编写一个简单的javabean类
package cn.zhong.com.spring.user;
import cn.zhong.com.spring.car.Car;
public class User {
private String username ;
private String password;
private String sex;
private int age;
private Car car;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void init(){
System.out.println("对象初始化!");
}
public void destroy(){
System.out.println("对象销毁");
}
public Car getCar() {
return car;
}
public void setCar(Car car) {
this.car = car;
}
@Override
public String toString() {
return "User [username=" + username + ", password=" + password + ", sex=" + sex + ", age=" + age + ", car="
+ car + "]";
}
}
(2) 在配置方法中set方法注入
<!--set方法注入 bean里面name是你创建的名称空间,class为你要创建类的路径-->
<!--property里面以键值对的形式存在,name对应class里面的属性名 ,value表示为此属性赋值-->
<bean name="user" class="cn.zhong.com.spring.user.User">
<property name="username" value="tom"></property>
<property name="age" value="18"></property>
<property name="car" ref="car"></property>
</bean>
(3)编写一个简单的测试方法:
package cn.zhong.com.spring.test;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.zhong.com.spring.factory.UserFactory;
import cn.zhong.com.spring.user.User;
public class Test1 {
@Test
public void fun1(){
//1 创建容器对象
ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
//2 向容器"要"user对象
User u = (User) ac.getBean("user");
//3 打印user对象
System.out.println(u);
// 关闭容器
ac.close();
}
}
测试结果:
2,构造器注入:(不经常用,使用时需要注意)
(1)类里面必须含有一个构造器:
//构造器
public User(String username, Car car) {
super();
this.username = username;
this.car = car;
}
(2)编写对应的配置文件
<!-- 构造方法注入 ,类方法中必须含有一个构造器-->
<!-- constructor-arg name 为类的属性值,index为构造器中名为name属性的位置下标 value表示赋的值-->
<bean name = "user" class="cn.zhong.com.spring.user.User">
<constructor-arg name="username" index="0" value="tom"></constructor-arg>
<constructor-arg name="car" index="1" ref="car"></constructor-arg>
</bean>
(3)测试结果:
3,p空间注入:(spring新推出的方法,但是之前的set方法比较适应人心,因此没得到推广,一般的不使用此方法)
(1)p名称空间导入约束;
(2)配置和set方法类似,但是比set方法简单(set方法结构严谨),大家也可以尝试一下。
<!-- p名称空间注入,和set注入格式差不多,简单明了 -->
<!-- <bean name="user" class="cn.zhong.com.spring.user.User"
p:username="jeck" p:car-ref="car"
></bean>
-->
4,spel表达式注入:这个和EL表达式相似,它引用我们之前创建的类的各个属性名称:
<!-- spel表达式和EL表达式很类似,引用之前我们创建的类的各个属性名称 -->
<bean name="user" class="cn.zhong.com.spring.user.User">
<!--引用之前我创建car的name名称,赋值给User.name -->
<property name="username" value="{car.name}"></property>
<property name="age" value="18"></property>
<!-- 引用类型 和上面的一样, -->
<property name="car" ref="car"></property>
</bean>
注意:引用类型:car(这个是我创建的一个car类)这user里面引用,引用时必须使用:ref