一、什么是Spring
- Spring是一個(gè)基于IOC(控制反轉(zhuǎn) Inversion of Control)和AOP(之后講解)的結(jié)構(gòu),J2EE系統(tǒng)的框架
- 簡單來說就是以前的Java程序,對(duì)象需要自己new一個(gè),而在Spring中,對(duì)象的創(chuàng)建交由Spring管理,不需要自己new
- 簡介多說無益,請(qǐng)往下看
二、什么是控制反轉(zhuǎn) IOC
Spring的核心思想之一就是 控制反轉(zhuǎn)
控制反轉(zhuǎn):對(duì)象的創(chuàng)建 由外部容器完成(外部容器是什么之后會(huì)講解),這個(gè)過程就是 IOC
- 進(jìn)一步解釋就是,new一個(gè)對(duì)象這個(gè)過程,不是自己寫的,是Spring提供的容器來完成
那對(duì)象的賦值,Spring是怎么做的呢?這就要提到依賴注入了
依賴注入(DI)
- Spring使用依賴注入來實(shí)現(xiàn)對(duì)象之間的依賴關(guān)系
- 在創(chuàng)建完對(duì)象之后,對(duì)象的關(guān)系處理就是依賴注入
- 簡單地說就是拿到的對(duì)象的屬性,已經(jīng)被注入好相關(guān)值了,直接使用即可。
- 不理解沒關(guān)系,參考之后的代碼實(shí)例
三、編寫Spring代碼
- 創(chuàng)建項(xiàng)目并導(dǎo)入相關(guān)jar包
1. 創(chuàng)建類,用來演示IOC及依賴注入
package com.shan.pojo;
public class Category {
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private int id;
private String name;
}
2. 在src目錄下創(chuàng)建applicationContext.xml文件
applicationContext.xml 是Spring的核心配置文件
<?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 name="category" class="com.shan.pojo.Category">
<property name="name" value="category_1"></property>
</bean>
</beans>
- 通過上面的三行代碼,就成功配置了Category類
- 通過關(guān)鍵字(name)category就能獲取到Category類的實(shí)例對(duì)象,這是 控制反轉(zhuǎn)
- 當(dāng)獲取該實(shí)例時(shí),對(duì)象的name屬性就被賦予了"category_1"值,這就是 依賴注入
3. 測試用例
package com.shan.pojo;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"applicationContext.xml"});
Category c = (Category)context.getBean("category");
System.out.println("獲取到的對(duì)象名字:" + c.getName());
}
}
- main中的第一行代碼用于加載整個(gè)XML文件
- context.getBean() 可以通過之前Bean中配置好的name獲得對(duì)象實(shí)例
- 整個(gè)過程沒有用到new關(guān)鍵字