文章目錄
- 一,IOC的xml方式--了解
- --1,專案結構
- --2,創建Hello類
- --3,創建User類
- --4,創建組態檔
- --5,創建測驗類
- 二,IOC的注解方式--重點
- --0,專案結構
- --1,創建類
- --2,配置包掃描
- --3,測驗
- 三,模擬 DI依賴注入
- --1,概述
- --2,測驗
- 創建Emp類
- 創建Dept 類
- 創建測驗類
- 四,Spring提供的DI依賴注入
- --1,創建UserInfo 類
- --2,創建Order 類
- --3,測驗類
- --4,總結
- 擴展:SpringMVC原始碼里的核心方法
一,IOC的xml方式–了解
–1,專案結構

–2,創建Hello類
package cn.tedu.spring;
public class Hello {
public void hi(){
System.out.println("hello springioc~");
}
}
–3,創建User類
package cn.tedu.spring;
public class User {
public void eat(){
System.out.println(123);
}
}
–4,創建組態檔
<?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">
<!--spring認為萬物皆是bean,配置bean的位置,spring自動完成ioc
class屬性用來描述類的全路徑, id屬性用來作為bean的唯一標識
scope="prototype"用來設定物件是多例的,默認是singleton單例的
IOC底層是Map結構,Map<id的值,類的物件>,資料結類似: {"hello",new Hello()}
spring只能用反射創建物件:
{"hello",Class.forName("cn.tedu.spring.Hello").newInstance() }
-->
<bean class="cn.tedu.spring.Hello" id="hello"></bean>
<bean class="cn.tedu.spring.User" id="user"></bean>
</beans>
–5,創建測驗類
package cn.tedu.spring;
import org.junit.jupiter.api.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test1 {
//測驗IOC(創建類+配置類)
@Test//junit單元測驗方法:@Test void public 沒有引數
public void ioc(){
//1,讀取組態檔--引數是組態檔的路徑
ClassPathXmlApplicationContext spring =
new ClassPathXmlApplicationContext(
"spring-config.xml");
//2,獲取spring創建好的物件--引數是組態檔里bean標簽的id的值
Object o = spring.getBean("hello");
System.out.println(o);//cn.tedu.spring.Hello@43bc63a3
Hello h = (Hello) o;
h.hi();
//單例物件:節省記憶體和時間,spring框架默認的創建單例物件的方式
Hello h2 = (Hello) spring.getBean("hello");
// System.out.println(o2);//cn.tedu.spring.Hello@43bc63a3
h2.hi();
//java.lang.ClassCastException:cn.tedu.spring.Hello cannot be cast to cn.tedu.spring.User
//User uu = (User) spring.getBean("hello");
//System.out.println(uu);
Object o3 = spring.getBean("user");
System.out.println(o3);//cn.tedu.spring.User@38425407
//向下轉型:把父型別別變成子型別別,目的要用子類的功能
User u = (User) o3 ;
u.eat();
}
}
二,IOC的注解方式–重點
1, 創建類, 類上使用IOC的注解
2, 創建組態檔, 指定包掃描的路徑
3, 直接getBean(“類名首字母要變成小寫”)
spring認為萬物皆是bean,配置bean的位置,spring自動完成ioc
class屬性用來描述類的全路徑, id屬性用來作為bean的唯一標識
scope="prototype"用來設定物件是多例的,默認是singleton單例的
IOC底層是Map結構,Map<id的值,類的物件>,資料結類似: {"hello",new Hello()}
spring只能用反射創建物件:
{"hello",Class.forName("cn.tedu.spring.Hello").newInstance() }
–0,專案結構

–1,創建類
package cn.tedu.spring;
import org.springframework.stereotype.Component;
@Component //用來讓spring完成ioc {"person"=new Person()}
public class Student {
public void study(){
System.out.println("Student.study()");
}
}
package cn.tedu.spring;
import org.springframework.stereotype.Component;
@Component //用來讓spring完成ioc {"person"=new Person()}
public class Person {
public void show(){
System.out.println("Person.show()");
}
}
–2,配置包掃描
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!--包掃描:掃描 指定包 以及 子包里的所有資源,找到有IOC注解的類就進行new
IOC的注解包括: @Component @Service @Controller
base-package 用來指定包路徑,范圍越小越好,性能高
-->
<context:component-scan base-package="cn.tedu"></context:component-scan>
</beans>
–3,測驗
package cn.tedu.spring;
import org.junit.jupiter.api.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test1 {
//單元測驗方法
@Test
public void ioc(){
//1,讀取組態檔---引數是組態檔的路徑
ClassPathXmlApplicationContext spring =
new ClassPathXmlApplicationContext(
"spring.xml");
//2,getBean()---引數是類名,首字母小寫
Object o = spring.getBean("person");
System.out.println(o);//cn.tedu.spring.Person@7e5afaa6
Object o1 = spring.getBean("student");
System.out.println(o1);
Object o2 = spring.getBean("animal");
System.out.println(o2);
}
}
三,模擬 DI依賴注入
–1,概述
維護了兩個物件間的關系,方便在使用A的同時可以看到關聯的B的資料
–2,測驗
創建Emp類
package cn.tedu.di;
public class Emp {
String name = "吳謙";
//系結了兩個類的關系--依賴
private Dept d;
//get set
public Dept getD() {
return d;
}
public void setD(Dept d) {
this.d = d;
}
@Override
public String toString() {
return "Emp{" +
"name='" + name + '\'' +
", d=" + d +
'}';
}
}
創建Dept 類
package cn.tedu.di;
public class Dept {
String name = "java軟體開發一部";
@Override
public String toString() {
return "Dept{" +
"name='" + name + '\'' +
'}';
}
}
創建測驗類
package cn.tedu.di;
import org.junit.Test;
public class TestDi {
@Test
public void di(){
//1,創建物件
Emp e = new Emp();
Dept d = new Dept();
//Emp{name='吳謙', d=null}
System.out.println(e);
//2,di維護了兩個物件間的關系-set()
e.setD(d);
//Emp{name='吳謙', d=Dept{name='java軟體開發一部'}}
System.out.println(e);
}
}
四,Spring提供的DI依賴注入
–1,創建UserInfo 類
package cn.tedu.di2;
import org.springframework.stereotype.Component;
@Component//ioc -- {"userInfo"=new UserInfo()}
public class UserInfo {
String name="jack";
@Override
public String toString() {
return "UserInfo{" +
"name='" + name + '\'' +
'}';
}
}
–2,創建Order 類
package cn.tedu.di2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component//ioc--{"order"=new Order()}
public class Order {
String name = "iphone13";
//get set
@Autowired //di
private UserInfo ui;
@Override
public String toString() {
return "Order{" +
"name='" + name + '\'' +
", ui=" + ui +
'}';
}
}
–3,測驗類
package cn.tedu.di2;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestDI {
@Test
public void di(){
//1,讀取組態檔
ClassPathXmlApplicationContext spring =
new ClassPathXmlApplicationContext(
"spring.xml");
//2,getBean()--DI:獲取A的同時也獲取到B的資訊
Object o = spring.getBean("order");
//Order{name='iphone13',ui=UserInfo{name='jack'}}
System.out.println(o);
}
}
–4,總結
IOC: 控制翻轉,Spring框架創建物件.
使用步驟: 1, 在類上使用注解@Component @Service @Controller 2, 配置包掃描
DI: 依賴注入,把兩個物件之間的關系依賴.
使用步驟: 1, 先完成IOC 2, 用注解@Autowired
擴展:SpringMVC原始碼里的核心方法

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/300737.html
標籤:java
