ioc的本质就是将在service层调用dao层的控制权进行转移,可以理解为:原本的选择权是我们程序员在service层写死的,new了哪个指定的对象就会调用dao层的实现类中的方法;使用ioc之后,在service层内将dao层的类的对象作为参数,并增加了set方法,将dao层对象作为参数进行传入,这样一来,只需要在测试类中调用service层的set方法并传入dao层具体的对象就会调用传入的实现类中的方法,程序变的不是那么死板。
1.引入依赖org.springframework spring-context 5.2.8.RELEASE
在引入该依赖以后就会自动配置spring所需要的其他依赖
2.编写案例2.1实体类
2.1.1User类
public class User {
private String name;
private int age;
public User() {
}
public User(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;
}
@Override
public String toString() {
return "User{" +
"name='" + name + ''' +
", age=" + age +
'}';
}
}
2.1.2Address类
public class Address {
private String address;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "Address{" +
"address='" + address + ''' +
'}';
}
}
2.1.3Student类
package com.joker.pojo;
import java.util.*;
public class Student {
private String name;
private Address address;
private String[] books;
private List hobbys;
private Map card;
private Set games;
private Properties info;
private String wife;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
public String[] getBooks() {
return books;
}
public void setBooks(String[] books) {
this.books = books;
}
public List getHobbys() {
return hobbys;
}
public void setHobbys(List hobbys) {
this.hobbys = hobbys;
}
public Map getCard() {
return card;
}
public void setCard(Map card) {
this.card = card;
}
public Set getGames() {
return games;
}
public void setGames(Set games) {
this.games = games;
}
public Properties getInfo() {
return info;
}
public void setInfo(Properties info) {
this.info = info;
}
public String getWife() {
return wife;
}
public void setWife(String wife) {
this.wife = wife;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + ''' +
", address=" + address.toString() +
", books=" + Arrays.toString(books) +
", hobbys=" + hobbys +
", card=" + card +
", games=" + games +
", info=" + info +
", wife='" + wife + ''' +
'}';
}
}
2.2基本的spring配置文件
配置Student类,展示了不同数据的注入方式 。
红楼梦 西游记 水浒传 三国
听歌 看电视 打游戏 lol coc bob 1234567890 joker 男
2.3含有c/p名空间的配置文件
配置User类
注意:这里的如果使用p命名空间来注入值,一般只用作set注入的方法;如果想要使用c命名空间,实体类中必须要有有参构造函数。
3.测试public class MyTest {
public static void main(String[] args) {
//获取spring容器,参数是对应的实体类的配置文件名称(这里为了方便区分,需要自己改一下配置文件名称)
ApplicationContext context = new ClassPathXmlApplicationContext("StudentBeans.xml");
//获取对象
Student student = (Student) context.getBean("student");
System.out.println(student.toString());
}
@Test
public void Test2() {
ApplicationContext context = new ClassPathXmlApplicationContext("UserBeans.xml");
User user = context.getBean("user", User.class);
System.out.println(user);
}
}



