set方法注入
通常的javabean属性都会私有化,二对外暴露setXxx(),getXxx()方法,此时spring可以通过这样的setXxx()方法将属性的值注入对象
a. 内置的可以直接注入类型的注入
package cn.tedu.beans;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
public class Hero {
private int id;
private String name;
private List jobs;
private Set set;
private Map map;
private Properties prop;
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setJobs(List jobs) {
this.jobs = jobs;
}
public void setSet(Set set) {
this.set = set;
}
public void setMap(Map map) {
this.map = map;
}
public void setProp(Properties prop) {
this.prop = prop;
}
@Override
public String toString() {
return "Hero [id=" + id + ", name=" + name + ", jobs=" + jobs
+ ", set=" + set + ", map=" + map + ", prop=" + prop + "]";
}
}
上单
打野
辅助
中单
aaa
bbb
ccc
aaa
v1
v2
v3
v4
@Test
/**
* SpringDI set方式属性注入 - Spring内置的可直接注入类型的注入
*/
public void test1(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Hero hero = (Hero) context.getBean("hero");
System.out.println(hero);
}
b. 非Spring内置的可以直接注入类型的注入
package cn.tedu.beans;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
public class Hero {
private int id;
private String name;
private List jobs;
private Set set;
private Map map;
private Properties prop;
private Dog dog;
private Cat cat;
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setJobs(List jobs) {
this.jobs = jobs;
}
public void setSet(Set set) {
this.set = set;
}
public void setMap(Map map) {
this.map = map;
}
public void setProp(Properties prop) {
this.prop = prop;
}
public void setDog(Dog dog) {
this.dog = dog;
}
public void setCat(Cat cat) {
this.cat = cat;
}
@Override
public String toString() {
return "Hero [id=" + id + ", name=" + name + ", jobs=" + jobs
+ ", set=" + set + ", map=" + map + ", prop=" + prop + ", dog="
+ dog + ", cat=" + cat + "]";
}
}
上单
打野
辅助
中单
aaa
bbb
ccc
aaa
v1
v2
v3
v4
@Test
/**
* SpringDI set方式属性注入 - 非Spring内置的可以直接注入类型的注入
*/
public void test2(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Hero hero = (Hero) context.getBean("hero");
System.out.println(hero);
}
基于构造方法的注入
对象属性设置的另一种方式是在对象创建的过程中通过构造方法实现属性的注入
package cn.tedu.beans;
public class Student {
private int id;
private String name;
private Dog dog;
public Student(int id, String name, Dog dog) {
this.id = id;
this.name = name;
this.dog = dog;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", dog=" + dog + "]";
}
}
@Test
/**
* SpringDI 构造方法方式属性注入
*/
public void test3(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Student student = (Student) context.getBean("student");
System.out.println(student);
}
自动装配
在Spring的set方式的注入过程中,支持自动装配机制,所谓自动装配机制,会根据要设置的javabean属性的名字或类型到spring中自动寻找对应id或类型的进行设置,从而省去一次配置的过程,简化了配置.
为指定开启自动装配.
为全局配置自动装配:
package cn.tedu.beans;
public class Teacher {
private Dog dog;
private Cat cat;
public void setDog(Dog dog) {
this.dog = dog;
}
public void setCat(Cat cat) {
this.cat = cat;
}
@Override
public String toString() {
return "Teacher [dog=" + dog + ", cat=" + cat + "]";
}
}
@Test
/**
* SpringDI 自动装配
*/
public void test4(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Teacher teacher = (Teacher) context.getBean("teacher");
System.out.println(teacher);
}