Spring中的自动装配方式

开发过程中,我们有着约定优于配置的思想,Spring中的自动装配方式,就是这种思想的具现。

先提一下,简单类型不能自动装配!

主流的自动装配标识有如下三种:

①autowire="byName"(通过Bean的ID和引用类型的ref属性的对应来自动装配)

②autowire="byType"(通过Bean的类型(class)与该对应类的ref属性类型一致来自动装配)

③autowire="constructor"(通过有参构造方法中的参数列表中的ref属性和Bean的属性对应来自动装配)

具体的代码这样写:

为了说得详细一些,我下面多展示一些代码。

首先我们有两个类,一个Course一个Teacher:

Course.java

public class Course {
   private String courseName;
   private int courseHour;
   //授课老师,依赖于Teacher类
   private Teacher teacher;
   
   public Course() {
	
	}
   
   
   
public Course(String courseName, int courseHour, Teacher teacher) {
	this.courseName = courseName;
	this.courseHour = courseHour;
	this.teacher = teacher;
}
public String getCourseName() {
	return courseName;
}
public void setCourseName(String courseName) {
	this.courseName = courseName;
}
public int getCourseHour() {
	return courseHour;
}
public void setCourseHour(int courseHour) {
	this.courseHour = courseHour;
}
public Teacher getTeacher() {
	return teacher;
}
public void setTeacher(Teacher teacher) {
	this.teacher = teacher;
}

public void showInfo() {
	System.out.println(this.courseName+","+this.courseHour+","+this.teacher.getName());
}
   
}

Teacher.java

public class Teacher {
 private String name;
 private int age;
 
 public Teacher() {
		
	}
 
public Teacher(String name, int age) {
	this.name = name;
	this.age = age;
}
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
public int getAge() {
	return age;
}
public void setAge(int age) {
	this.age = age;
}
}

如果不用自动装配的话,在applicationContext.xml中我们应该这样写id为course的Bean:

<bean id="course"  class="org.szh.entity.Course"  >
<property name="courseName" value="java"></property>
<property name="courseHour" value="200"></property>
<property name="teacher" ref="teacher"></property>
</bean>

如果使用自动装配的话,我们只需这样写即可:

<bean id="course"  class="org.szh.entity.Course" autowire="byName" >
<property name="courseName" value="java"></property>
<property name="courseHour" value="200"></property>
</bean>

通过这个byName,Spring会在org.szh.entity.Course里找到这个引用类型,然后在applicationContext.xml(也就是它自身)中找有没有id为teacher的Bean,显然是有的(代码如下):

<bean id="teacher"  class="org.szh.entity.Teacher" p:age="24" p:name="lq">
</bean>

之后就可以实现自动装配了,而不用再去写这样一句话了。

-----------------------------------------------------------------------------------------------------------------------------------------------

当然一个个去在Bean里去配置autowire属性也够累,我们可以在配置头文件里加上这样一段代码来实现全局自动装配:

<beans
default-autowire="byName/byType/construction"//三选一
>

这样下面所有的Bean都会遵循你配置的标识来自动装配。

不过也有风险,比如有两个相同类型但不同id的Bean(byType用不了),或是相同id不同属性的Bean(byName用不了)

大家在使用时还需多加注意!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值