面試官:為什么要用 Spring?它到底解決了什么問題?
閱讀本文大概需要 2.8 分鐘。
來自:https://blog.csdn.net/qq_38050259/article/details/113414419
方式一:傳統(tǒng)方式
1.Service層
/**
?*?@author :Prannt
?*?@description :Service層
?*?@program?:?Test
?*/
public?class?UserService?{
????public?void?add(){
????????System.out.println("service?add...");
????????UserDao?dao?=?new?UserDaoImpl();
????????dao.query();
????}
}
2.UserDao接口
/**
?*?@description :接口中只有一個抽象方法
?*/
public?interface?UserDao?{
????void?query();
}
3.UserDao接口的實現(xiàn)類
/**
?*?@description :接口的實現(xiàn)類,重寫 query方法
?*/
public?class?UserDaoImpl?implements?UserDao{
????@Override
????public?void?query()?{
????????System.out.println("dao?query...");
????}
}
//測試
public?class?test?{
????@Test
????public?void?test1(){
????????UserService?service?=?new?UserService();
????????service.add();
????}
}

結論一:由以上過程可以看出,在UserService類中直接調(diào)用實現(xiàn)類的query方法,一旦實現(xiàn)類出問題,UserService立即報錯,具有高度的耦合性
方式二:Spring注入對象
1.xml文件配置bean
"1.0"?encoding="UTF-8"?>"http://www.springframework.org/schema/beans"
???????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
???????xsi:schemaLocation="http://www.springframework.org/schema/beans?http://www.springframework.org/schema/beans/spring-beans.xsd">
????"userService"?class="Service.UserService">
????????
????????"dao"?ref="Dao">
????
????"Dao"?class="Dao.UserDaoImpl">
2.Service層
import?Dao.UserDao;
/**
?*?@author :Prannt
?*?@description :
?*?@program?:?Demo01
?*/
public?class?UserService?{
????public?void?add(){
????????System.out.println("service?add......");
????????dao.update();
????}
????//創(chuàng)建dao類型的屬性,生成對應的set方法
????private?UserDao?dao;
????public?void?setDao(UserDao?dao)?{
????????this.dao?=?dao;
????}
}
3.UserDao接口
public?interface?UserDao?{
????void?update();
}
4.接口的實現(xiàn)類
public?class?UserDaoImpl?implements?UserDao{
????@Override
????public?void?update()?{
????????System.out.println("Dao?update......");
????}
}
import?Service.UserService;
import?org.junit.Test;
import?org.springframework.context.ApplicationContext;
import?org.springframework.context.support.ClassPathXmlApplicationContext;
public?class?TestBean?{
????@Test
????public?void?testBean(){
????????ApplicationContext?context?=?new?ClassPathXmlApplicationContext("bean2.xml");
????????UserService?userService?=?context.getBean("userService",UserService.class);
????????userService.add();
????}
}

結論二:觀察以上過程,在UserService類中,沒有直接new實現(xiàn)類,而是通過將Dao注入外部配置文件中的方式,使用“第三方文件”來達到解耦的目的。
總結


推薦閱讀:
超贊 ! 老外的一種避免遞歸查詢所有子部門的樹數(shù)據(jù)表設計與實現(xiàn)!
內(nèi)容包含Java基礎、JavaWeb、MySQL性能優(yōu)化、JVM、鎖、百萬并發(fā)、消息隊列、高性能緩存、反射、Spring全家桶原理、微服務、Zookeeper、數(shù)據(jù)結構、限流熔斷降級......等技術棧!
?戳閱讀原文領取!? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??朕已閱?

