一 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...