Spring常用的注入方式

Spring支持的常用注入方式有属性注入(setter注入),构造函数器注入,工厂方法注入。
1. 属性注入(setter注入)
属性注入指通过setXXX()方法注入bean的属性值或依赖对象。具有可选性和灵活性高的特点。要求bean提供一个默认的构造函数(无参),为注入的属性提供对应的setter方法。
例:
package test;

public class User {

private String phone;
private String userName;
private String password;

public String getPhone() {
	return phone;
}

public void setPhone(String phone) {
	this.phone = phone;
}

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;
}

@Override
public String toString() {
	return "User [phone=" + phone + ", userName=" + userName
			+ ", password=" + password + "]";
}

}
XML配置

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns=“http://www.springframework.org/schema/beans
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xmlns:p=“http://www.springframework.org/schema/p
xmlns:context=“http://www.springframework.org/schema/context
xmlns:aop=“http://www.springframework.org/schema/aop
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd

">
<bean id="user" class="test.User">
	<property name="phone">
		<value>12345678901</value>
	</property>
	<property name="userName">
		<value>asd</value>
	</property>
	<property name="password">
		<value>123</value>
	</property>

</bean>
测试 package test;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestMain {

public static void main(String[] args) {
	ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(
			"applicationContext.xml");

	User user = (User) ctx.getBean("user");
	System.out.println(user);

}

}
结果:
在这里插入图片描述注意:变量的前两个字母要不全部大写,要不全部小写。
2. 构造函数注入
使用构造函数注入bean必须提供带参的构造函数。

package test;

public class User {

private String phone;
private String userName;
private String password;

public User(String phone, String userName, String password) {
	this.phone = phone;
	this.userName = userName;
	this.password = password;
}

public String getPhone() {
	return phone;
}

public void setPhone(String phone) {
	this.phone = phone;
}

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;
}

@Override
public String toString() {
	return "User [phone=" + phone + ", userName=" + userName
			+ ", password=" + password + "]";
}

}
xml配置:

<bean id="user" class="test.User">
	<constructor-arg index="0" type="java.lang.String">
		<value>15012345678</value>
	</constructor-arg>
	<constructor-arg index="1" type="java.lang.String">
		<value>aa</value>
	</constructor-arg>
	<constructor-arg index="2" type="java.lang.String">
		<value>321</value>
	</constructor-arg>
</bean>

注:“type”判断了配置项和构造函数入参的项是否匹配,“index” 通过入参索引的位置确定对应关系。

测试
package test;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestMain {

public static void main(String[] args) {
	ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(
			"applicationContext.xml");

	User user = (User) ctx.getBean("user");
	System.out.println(user);

}

}
结果:
在这里插入图片描述
3. 工厂方法注入
1)静态工厂方法
package test;

//创建工厂类
public class UserFactory {
// 创建静态工厂方法
public static User getUserInfo() {
User user = new User();
user.setPhone(“98765432112”);
user.setPassword(“987”);
user.setUserName(“test”);
return user;

}

}
xml配置:

<!-- class指定工厂类-->
<bean id="user" class="test.UserFactory" factory-method="getUserInfo">

</bean>
测试:
package test;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestMain {

public static void main(String[] args) {
	ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(
			"applicationContext.xml");

	User user = (User) ctx.getBean("user");
	System.out.println(user);

}

}
结果:
在这里插入图片描述

2) 非静态工厂方法
非静态工厂方法必须实例化工厂类后才能调用工厂类方法。

package test;

//创建工厂类
public class UserFactory {

// 创建非静态工厂方法
public User getUserInfo() {
	User user = new User();
	user.setPhone("98765432112");
	user.setPassword("987");
	user.setUserName("test");
	return user;

}

}
xml配置

<!-- 定义工厂类bean -->
<bean id="userFactory" class="test.UserFactory"></bean>

<!-- factory-bean工厂类bean  factory-method工厂类方法-->
<bean id="user" factory-bean="userFactory" factory-method="getUserInfo">
</bean>

测试:
package test;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestMain {

public static void main(String[] args) {
	ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(
			"applicationContext.xml");

	User user = (User) ctx.getBean("user");
	System.out.println(user);

}

}
结果:
在这里插入图片描述


版权声明:本文为qq_44077791原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。