什么是IOC
Inversion Of Control 控制反轉或反向控制
控制反轉:改變了物件的獲取方式,之前編碼方式采用new關鍵字方式獲取物件,IOC中采用容器創建物件之后并注入進來使用,只要修改配置就可以改變物件關系,降低了耦合度,
Spring IOC
可以理解為以下兩個作用:
- 管理組件物件
從實體化,初始化,釋放資源,銷毀四個方面對組件物件進行管理 - 維護物件關系
采用注入方式建立物件關系,依賴注入(Dependency Injection),控制反轉,DI兩種方式:set注入,構造器注入(具體舉例見代碼)
Spring IOC實作流程
1.搭建Spring IOC開發環境
– 引入相關jar檔案

–src下創建xml組態檔

2.定義bean
class=“包名.類名”
package org.oracle.test;
public class Computer {
private String cpu;
private String hdd;
private String mainbord;
public void show(){
System.out.println("----電腦配置----");
System.out.println("cpu:"+cpu);
System.out.println("hdd:"+hdd);
System.out.println("mainbord:"+mainbord);
}
public void setCpu(String cpu) {
this.cpu = cpu;
}
public void setHdd(String hdd) {
this.hdd = hdd;
}
public void setMainbord(String mainbord) {
this.mainbord = mainbord;
}
}
package org.oracle.test;
public class Phone {
private String cpu;
private String ram;
public Phone(String cpu,String ram){
this.cpu = cpu;
this.ram = ram;
}
public void show(){
System.out.println("----手機配置---");
System.out.println("cpu:"+cpu);
System.out.println("ram:"+ram);
}
}
package org.oracle.test;
public class Student {
private Computer c;
private Phone p;
public void show(){
c.show();
p.show();
}
public void setC(Computer c) {
this.c = c;
}
public void setP(Phone p) {
this.p = p;
}
}
Spring的組態檔:
<bean id="p1" class="org.oracle.test.Computer">
<!-- 資訊set注入 -->
<property name="cpu" value="梟龍"></property>
<property name="hdd" value="索尼"></property>
<property name="mainbord" value="華碩"></property>
</bean>
<bean id="p2" class="org.oracle.test.Phone">
<!-- 構造器注入 -->
<constructor-arg index="0" value="高通"></constructor-arg>
<constructor-arg index="1" value="8G"></constructor-arg>
</bean>
<bean id="s1" class="org.oracle.test.Student">
<!-- set注入 -->
<property name="c" ref="p1"></property>
<property name="p" ref="p2"></property>
</bean>
3.實體化Spring容器(ApplicationContext)
4.使用時ac.getBean(“id值”),盡量不要用強轉
package org.oracle.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestComputer {
public static void main(String[] args) {
ApplicationContext ac = new
ClassPathXmlApplicationContext("applicationContext.xml");
Computer c = ac.getBean("p1",Computer.class);
c.show();
}
}

Spring對bean物件的創建管理:
主要有三種方法:構造方法,工廠靜態方法和物件工廠方法
package oracle.oracle;
public class test01 {
private String a;
public test01(){
a="構造方法";
}
public void show(){
System.out.println(a);
}
}
package oracle.oracle;
public class test02 {
public static String test(){
String a="靜態工廠方法";
return a;
}
}
package oracle.oracle;
public class test03 {
private String name;
private int age;
public test03(String name,int age){
this.name=name;
this.age=age;
}
public String show(){
return name+":"+age;
}
}
Spring的組態檔
<!-- 采用構造方法 -->
<bean id="t1" class="oracle.oracle.test01">
</bean>
<!-- 采用靜態工廠方法 -->
<bean id="t2" class="oracle.oracle.test02" factory-method="test">
</bean>
<bean id="t3" class="oracle.oracle.test03">
<constructor-arg index="0" value="張三"></constructor-arg>
<constructor-arg index="1" value="25"></constructor-arg>
</bean>
<!-- 采用物件工廠方法 -->
<bean id="t4" factory-bean="t3" factory-method="show">
</bean>
package oracle.oracle;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class test04_test {
public static void main(String[] args) {
ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
String a=(String)ac.getBean("t4");
System.out.println(a);
}
}
Spring創建Bean物件的控制
a.控制物件的創建方式(使用范圍)
在<bean>元素中使用scope屬性控制
scope可以支持singleton和prototype,默認singleton
<bean scope="singleton">該組件在Spring容器里只有一個bean物件
<bean scope="prototype">該組件在Spring容器里每次ac.getBean時
都會回傳一個新物件
b.控制物件的初始化方法
利用<bean>元素的init-method指定
當創建物件后自動執行init-method指定的方法
c.指定物件的銷毀方法
利用<bean>元素的destroy-method指定
滿足兩個條件才有效:
--組件物件為單例模式
--呼叫AbstractApplicationContext物件的close方法
d.控制單例物件的創建時機
在默認情況下,單例物件是Spring容器創建時實體化,可以使用<bean>
元素的lazy-init="true"屬性將創建時機推遲到getBean方法呼叫時
下一篇整理IOC的注解版,提前祝看到這里的你新年快樂!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/258171.html
標籤:java
上一篇:什么是HashMap
