控制反转IOC
当我们调用一个方法或者类时,不再有我们主动去创建这个类的对象,控制权交给别人(spring)。
依赖注入DI
spring主动创建被调用类的对象,然后把这个对象注入到我们自己的类中,使得我们可以使用它。
项目结构
新建一个Hello类
package com.yc.spring;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@Component("hello")
@Scope("prototype")
public class Hello {
private String name = "无名氏";
@Autowired
private Person person;
public Hello() {
System.out.println("我是Hello的构造方法");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
public void sayHello(){
System.out.printf("%s对%s说你好帅\n",name,person.getName());
}
@Override
public String toString() {
return "Hello [name=" + name + ", person=" + person + "]";
}
}
新建一个Person类
package com.yc.spring;
import org.springframework.stereotype.Component;
@Component("person")
public class Person {
private String name = "帅哥";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person [name=" + name + "]";
}
}
Test类
package com.yc.spring;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class HelloTest {
@Test
public void testIOC() {
Hello h = new Hello();
System.out.println(h);
h.sayHello();
}
@Test
public void testIOC2() {
ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml");
System.out.println("=========");
Hello hello = (Hello) ac.getBean("hello");
System.out.println(hello);
hello.sayHello();
}
@Test
public void testIOC3() {
ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml");
System.out.println("=========");
Hello hello = (Hello) ac.getBean("hello");
System.out.println(hello);
hello.sayHello();
Hello hello1 = (Hello) ac.getBean("hello");
if(hello==hello1){
System.out.println("同一对象");
}else {
System.out.println("不同对象");
}
}
}
小结:
- 使用spring框架之后,创建对象的操作交由spring框架去处理,这称为IOC(控制反转)
- spring默认取到的对象是单例的,想要获取不同的对象,需要在类的前面加上@Scope(“prototype”)注解