Spring中Ioc的幾種實現方式

2022-07-26 20:06:08 字數 1920 閱讀 2691

一 setter方法注入

配置檔案如下:

action實現類中**:

private ihelloservice helloservice;

private string name ;

public void sayhello()

public void sethelloservice(ihelloservice helloservice)

public void setname(string name)

這裡的name和helloservice都採用屬性的setter方法注入。即類中設定乙個全域性屬性,並對屬性有setter方法,以供容器注入。

二 構造器注入

spring也支援構造器注入,也即有些資料中的構造子或者建構函式注入。

先看配置檔案:

action實現類中**:

private helloserviceimpl helloservice;

private string name ;

public springconstructorhelloaction(helloserviceimpl helloservice,string name)

@override

public void sayhello()

同樣設定2個屬性,然後在建構函式中注入。

三靜態工廠注入

配置檔案如下:

action實現類:

private helloserviceimpl helloservice;

private string name = null;

private springfactoryhelloaction(string name ,helloserviceimpl helloservice)

public static springfactoryhelloaction createinstance(string name ,helloserviceimpl helloservice)

@override

public void sayhello()

四 無配置檔案注入(自動注入)

上面三種方法都需要編寫配置檔案,在spring2.5中還提供了不編寫配置檔案的ioc實現。需要注意的是,無配置檔案指bean之間依賴,不基於配置檔案,而不是指沒有spring配置檔案。

配置檔案如下:

<?xml version="1.0" encoding="utf-8"?>

"xmlns:xsi=""

xsi:schemalocation="

/spring-beans-2.5.xsd">

可見上面只是設定了helloservice和helloaction兩個bean,並沒有設定helloaction對helloservice的依賴。

另外是必須的,有此才支援自動注入。

action實現類:

/** 屬性自動裝載

*//*

@autowired

private helloservice helloservice;

@override

public void sayhello()

setter方法自動注入:

/** 也可以使用set方法設定

*//*

@autowired

public void sethelloservice(helloservice helloservice)

最後在spring的reference文件中有提到,如果不使用自動注入,盡量使用setter方法,一般通用的也是使用setter方法。

而使用自動注入還是配置檔案方式,如果jdk低於1.5或者spring不是2.5,就只能夠使用配置檔案方式了。其它的就看實際專案選擇了。

簡單實現spring中Ioc容器

spring的ioc容器是通過工廠模式 反射機制完成的。簡單來說反射機制就是我們可以通過類的名字來生成物件。比如比較常見的用法 person p person class.forname chinese newinstance 這樣子,我們可以直接通過chinese這個類的名字來構造這個物件。下面我...

Spring中IOC程式設計

一 基本概念 1.ioc inverse of controll 控制反 所謂控制反轉就是把建立物件 bean 和維護物件 bean 的關係的權利從程式中轉移到spring的 容器 applicationcontext.xml 而程式本身不再維護.2.di dependency injection ...

spring學習日誌ioc的實現。

1 spring ioc 執行的典型流程 i 解析配置檔案解析為beandifinition resource 解析 defaultbeandefinitiondocumentreader 組裝 beandefinitionparserdelegate.parsebeandefinitionelem...