既然要学习Spring,那我们就要了解什么是Spring,Spring是轻量级的JavaEE开源开发框架,Spring有两大核心:IOC(控制反转)和 AOP(面向切面编程),今天我们先来学习IOC(控制反转)
所谓IOC(控制反转)简单来说就是将new 对象的控制权交给Spring去做,而不是程序员自己new 对象,IOC通过容器实现,将对象与对象进行解耦,Spring容器在初始化时先读取配置文件,根据配置文件(即XML文档)创建与组织对象存入容器中,程序使用时再从IOC容器取出需要的对象
那我们要在XML文档配置什么呢,主要是配置Bean,Bean的定义信息和实现是分离的,Bean的定义主要是通过pojo定义类,而实现是在XML文档中通过具体的Bean来实现,下面我们来看一个例子:
首先这是一个pojo的User类
package xy.kc2021.spring01.pojo;
public class User {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public User(){
System.out.println("User的无参构造");
}
public void show(){
System.out.println("name: "+name);
}
}
在XML中我们可以通过Bean new一个User类的对象并注入name属性的值 ,这个过程相当于平时我们写的 User user = new User(); user.setName("哈哈");
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="user" class="xy.kc2021.spring01.pojo.User">
<property name="name" value="哈哈"></property>
</bean>
</beans>
同时我们也可以通过读取XML中的Bean获得对象执行User类show()方法
package xy.kc2021.spring01;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import xy.kc2021.spring01.pojo.User;
public class Application {
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
User user = (User) applicationContext.getBean("user");
user.show();
}
}
首先通过读取配置文件,再通过getBean的方法获取Bean,最后Bean中获取user(User类的对象)
最终输出结果为:
调用了无参构造,并且执行show()方法,可见,User类对象user的创建、属性的装配交给了Bean,也就是对象的创建、管理被Spring控制并管理
以后如果要实现不同的操作,只需要在XML配置文件中进行修改即可,不用修改程序。
总结:所谓的IOC(控制反转),就是对象由Spring创建、管理、装配