Spring _bean &ltproperty&gt与&ltconstructor-arg&gt优先级问题_bean属性依赖注入

今天在学习 Spring 使用<property><constructor-arg>标签注入属性时,发现如果同时使用这两种注入方式,不论先后顺序怎么放,都<property>标签的值起作用,难这两种注入方式存在优先级?

Spring _bean <property><constructor-arg>优先级问题

我们先来看一下代码
1、这是一个学生类

package com.exec.T2;

//学生类
public class Student {
	private String name;
	private String sex;
	private String address;
	
	public Student(String address) {
		this.setAddress(address);
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	
}

2、这是一个应用类

package com.exec.T2;
//应用类
public class Application {
	private Student student;

	public Student getStudent() {
		return student;
	}

	public void setStudent(Student student) {
		this.student = student;
	}
	
	public void getMessage() {
		System.out.println("姓名:"+this.student.getName()+" ,地址:"+this.student.getAddress());
	}
}

3、这是main方法入口类

package com.exec.T2;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test_Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ApplicationContext apc=new ClassPathXmlApplicationContext("applicationContext.xml");
		Application ap=apc.getBean("application_bean",Application.class);
		ap.getMessage();
	}

}

4、在启动前我们要配置好我们的配置文件:
pom.xml文件里面添加我们的spring Ioc基础配置

 <dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-context</artifactId>
	<version>4.3.12.RELEASE</version>
</dependency>

然后在src/nain/resources文件目录下我们调用applicationContext.xml配置文件里注入依赖

	<bean id="student_bean" class="com.exec.T2.Student">
		<property name="name" value="张三"></property>
		<property name="sex" value="男"></property>
		
		<property name="address" value="锦绣中华"></property>
		<constructor-arg index="0" value="美丽中国"></constructor-arg>
	</bean>
	
	<bean id="application_bean" class="com.exec.T2.Application">
		<property name="student" ref="student_bean"></property>
	</bean>

然后我们运行项目得出结果是 “锦绣中华” (如下)
在这里插入图片描述
我们修改一下我们的applicationContext.xml配置

	<bean id="student_bean" class="com.exec.T2.Student">
		<property name="name" value="张三"></property>
		<property name="sex" value="男"></property>
		<constructor-arg index="0" value="美丽中国"></constructor-arg>
		<property name="address" value="锦绣中华"></property>
	</bean>
	
	<bean id="application_bean" class="com.exec.T2.Application">
		<property name="student" ref="student_bean"></property>
	</bean>

再次运行,我们会发现结果一模一样(如下)
在这里插入图片描述
1、<property>标签是 setter方法的映射,即我们要使用这个标签那么在类里必须要有对应的 setter方法,否则是无法注入属性值的。
2、<constructor-arg>标签是构造方法的映射,如果我们没有构造方法一样无法注入属性值。

由此在Spring Ioc容器中如果同时使用这两种方式注入属性值,那么无论先后顺序,Spring Ioc容器应该会优先执行代表构造方法的<constructor-arg>标签再执行代表setter方法的<property>标签。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值