那么什么是控制反转呢 嘻嘻 请看下面解释
控制反转(nversion of Control)IoC:用白话来说就是 java代码本身不用自己负责自己 交给外部文件来维护和创建 控制权就转移到了外部文件 所以就称之为控制反转
IoC其实还有一个另外的名字:依赖注入 (DI=Dependency Injection) ,也就是容器动态的将某种依赖关系注入到组件之中
我们就通过代码来了解Spring Ioc吧
首先我们先创建一个实体类
package com.damei.entity;
public class Person {
private Integer pid;
private String pname;
private String pwd;
public Integer getPid() {
return pid;
}
public void setPid(Integer pid) {
this.pid = pid;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public Person() {
super();
}
public Person(Integer pid, String pname, String pwd) {
super();
this.pid = pid;
this.pname = pname;
this.pwd = pwd;
}
@Override
public String toString() {
return "Person [pid=" + pid + ", pname=" + pname + ", pwd=" + pwd + "]";
}
}
之后再写一个测试类 我们先不用通过Spring来写测试代码可以看出 我们要new 一个对象 然后通过set 构造方法来给对象赋值
package com.damei.test;
import com.damei.entity.Person;
public class PersonTest {
/**
* 在之前 我们需要实例化一下 new一个对象出来
* 然后通过set 以及 构造来给对象赋值
*
*/
@org.junit.Test
public void Test() {
Person person = new Person();
person.setPid(1);
person.setPname("李高冷");
person.setPwd("12345");
System.err.println(person);
}
}
而学了Spring之后我们就直接不用new 对象了,当然我们得配置Spring文件
之后我们在写一个Spring的测试类 (里面还讲解了延迟加载和及时加载 具体可以看里面的注解)
package com.damei.test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
import com.damei.entity.Person;
public class SpringTest {
/**
* 延迟加载与及时加载的区别:
* 延迟加载:当你要使用的时候在给你实例化 所以它就比较的延迟
* 如果在启动Tomcat服务器的时候 使用这个的话就会很快
* 及时加载:当你读取Spring配置文件中的所有实体类 就帮你全部先new出来 然后你需要的话 就通过applicationContext拿就行
* 如果在启动Tomcat服务器的时候 使用这个的话就会很慢
* @param args
*/
@SuppressWarnings("resource")
public static void main(String[] args) {
// 第一步:加载Spring的配置文件 (有两种方式加载)
// 1.1 延迟加载( 懒汉式加载)
// BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
/*
* .getBean("person") 就是获取Spring的配置文件中 id="person"
*/
// Person person = (Person) beanFactory.getBean("person");
// System.out.println(person);
// 1.2 及时加载
//读取Spring配置文件中的所有实体类 并帮你全部先new出来 然后你需要的话 就通过applicationContext拿就行
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
Person person = (Person) applicationContext.getBean("person");
System.out.println(person);
}
}
依赖注入的3种方式
· set方法注入
· 构造方法注入
· 自动装配