生活随笔
收集整理的這篇文章主要介紹了
Spring依赖注入(DI)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2019獨角獸企業重金招聘Python工程師標準>>>
1.面向接口編程
什么是面向接口編程呢?我個人認為,就是在我們的系統分析和架構中,首先,分清層次和依賴關系,每個層次不直接向上層提供服務,即,我們不需要在上層中實例化。向上層僅需提供一組接口功能,具體的實現,允許有多個實現類,具體的實現交給實現類來完成。
舉個例子,我們的dto實現是交給service,而service實現依賴dao,如果我們在service中用到了dao的實例,那么如果dao中換了一種實現,或者是多加了一種實現,我們都需要在service中去修改,這樣很麻煩。譬如,常見的登錄,原本我們采用的oracle,現在,倘若換成了mysql或者是XML那么我們的service就需要改動。如果我們將dao定義成接口,而在service中緊緊只是聲明一個dao,具體的實例,我們放在配置文件中,那么最后我們dao的改變,只需要改動配置文件即可(spring注入依賴就是這樣的)。
1.Spring注入依賴(DI)
注入依賴的原理,當然用到就是xml解析,和動態代理,具體的我都有寫過相關博客
Setter方法注入(示例) 導入相關jar包,我用的是spring2.5,導入spring.jar和commons-logging.jar即可假設我們有一個People類(這里我們需要定義屬性的setter方法,getter方法可以不需要)package edu.hubu.model;
public class People {private String name;private int age;private String addr;public People(String name, int age, String addr) {super();this.name = name;this.age = age;this.addr = addr;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getAddr() {return addr;}public void setAddr(String addr) {this.addr = addr;}@Overridepublic String toString() {return "People [addr=" + addr + ", age=" + age + ", name=" + name + "]";}
}
1. 然后我們配置applicationContext.xml
<?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/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsd"><!--在spring DI中注入方式主要有三種1.setter注入:在類中對應屬性的setter方法2.構造器注入3.接口注入 --><bean id="people" class="edu.hubu.model.People"><property name="name" value="zhangsan"></property><property name="age" value="20"></property><property name="addr" value="湖北武漢"></property></bean>
</beans>
1. 在Test中運行
package edu.hubu.test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import edu.hubu.model.People;
public class Test {public static void main(String[] args) {BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");Object o = factory.getBean("people");People people = (People)o;System.out.println(people);}
}
1. 最后執行結果就是People類中toString方法打印出來的東西。
構造器注入(在類中定義的指定構造器,在配置中對應的構造器的指定屬性賦值) 配置文件<?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/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsd"><!--在spring DI中注入方式主要有三種1.setter注入:在類中對應屬性的setter方法2.構造器注入3.接口注入 --><bean id="people" class="edu.hubu.model.People"><constructor-arg value="18" index="1"></constructor-arg><constructor-arg value="張三" index="0"></constructor-arg><constructor-arg value="湖北武漢" index="2"></constructor-arg></bean>
</beans>
1. 這里我們用到的<constructor-arg>標簽進行屬性的賦值。這里有一點值得注意的是,這里的index,可以不需要,但是,構造器輸入容易引起屬性混淆的問題,就是,如果我們這里的順序和構造器中的順序不一樣,可能就會報錯,所以,我們常常加上index,利用index的值取保證這里的順序和構造器中屬性順序一致。
接口注入(用的不多,不聊)
轉載于:https://my.oschina.net/u/2968127/blog/841624
總結
以上是生活随笔為你收集整理的Spring依赖注入(DI)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。