口語化答案
好的,面試官,依賴注入(Dependency Injection,簡稱DI)是Spring框架實現控制反轉(IoC)的主要手段。DI的核心思想是將對象的依賴關系從對象內部抽離出來,通過外部注入的方式提供給對象。這樣,依賴對象的創建和管理由Spring容器負責,而不是由對象自身負責,使得代碼更加模塊化、松耦合和易于測試。
題目解析
重點題,三大概念之一。di,ioc,aop 之一,大家一定要整明白。
面試得分點
構造函數,setter,注解
詳細答案
在傳統編程中,一個對象通常會自己創建它所依賴的其他對象。這種方式使得代碼緊密耦合,不利于維護和測試。依賴注入通過將依賴關系從代碼中移除,轉而由外部容器(如Spring容器)來注入,從而實現了對象之間的松耦合。
依賴注入的類型
Spring框架主要提供了三種依賴注入的方式:
構造函數注入:
通過構造函數將依賴對象傳遞給被依賴對象。
public class Service {private final Repository repository;public Service(Repository repository) {this.repository = repository;}
}
Setter方法注入:
通過Setter方法將依賴對象注入到被依賴對象中。
public class Service {private Repository repository;public void setRepository(Repository repository) {this.repository = repository;}
}
字段注入:
直接在字段上使用注解進行注入。
public class Service {@Autowiredprivate Repository repository;
}
依賴注入的配置方式
XML配置:
通過XML文件定義Bean及其依賴關系。
<beans><bean id="repository" class="com.example.Repository"/><bean id="service" class="com.example.Service"><constructor-arg ref="repository"/></bean>
</beans>
@Configuration+@Bean注解配置:
通過Java類和注解定義Bean及其依賴關系。
@Configuration
public class AppConfig {@Beanpublic Repository repository() {return new Repository();}@Beanpublic Service service() {return new Service(repository());}
}
@Component+@Autowired注解配置:
通過注解(如@Component,@Autowired)自動掃描和注入Bean。
@Component
public class Repository {
}@Component
public class Service {@Autowiredprivate Repository repository;
}