中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

建設(shè)銀行信用卡中心網(wǎng)站咸陽網(wǎng)站建設(shè)公司

建設(shè)銀行信用卡中心網(wǎng)站,咸陽網(wǎng)站建設(shè)公司,wordpress 母嬰主題,如何免費創(chuàng)建網(wǎng)站平臺了解準備 什么是Spring? Spring是一款輕量級的控制反轉(zhuǎn)(IOC)和面向切面編程(AOP)的非入侵式開源框架 2002年Spring的前身interface21發(fā)布,隨后在2004年3月24日正式更名發(fā)布Spring1.0版本Spring Frameword締…

了解準備

什么是Spring?

Spring是一款輕量級的控制反轉(zhuǎn)(IOC)和面向切面編程(AOP)的非入侵式開源框架

  • 2002年Spring的前身interface21發(fā)布,隨后在2004年3月24日正式更名發(fā)布Spring1.0版本
  • Spring Frameword締造者 Rod Johnson,悉尼大學音樂學博士生

Spring框架主要由七部分組成,分別是 Spring Core、 Spring AOP、 Spring ORM、 Spring DAO、Spring Context、 Spring Web和 Spring Web MVC
Spring三大核心:IOC控制反轉(zhuǎn)、DI依賴注入、AOP面向切面編程

Spring整合了現(xiàn)有的技術(shù)框架,使這些技術(shù)更加易于使用

Spring官網(wǎng):https://spring.io/
下載地址:https://repo.spring.io/ui/native/release/org/springframework/spring
GitHub地址:https://github.com/spring-projects/spring-framework
maven依賴:

<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.18</version>
</dependency>

整合MyBatis時導入

<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.23</version>
</dependency>

IOC思想

引入IOC

準備Dao層接口和一堆實現(xiàn)類

public interface UserDao {void getUser();
}
public class UserDaoImpl implements UserDao{public void getUser() {System.out.println("UserDao獲取User成功!");}
}
public class UserDaoMySqlImpl implements UserDao{public void getUser() {System.out.println("UserDaoMySqlImpl獲取User成功!");}
}
public class UserDaoOracleImpl implements UserDao{public void getUser() {System.out.println("UserDaoOracleImpl獲取User成功!");}
}

準備業(yè)務(wù)層

public interface UserService {void getUser();
}
public class UserServiceImpl implements UserService{private UserDao userDao = new UserDaoImpl;public void getUser() {userDao.getUser();}
}

測試不同UserDao實現(xiàn)類的getUser方法

public class MyTest {@Testpublic void testGetUser(){UserServiceImpl service = new UserServiceImpl();service.getUser();}
}

可以發(fā)現(xiàn),當需要調(diào)用不同UserDao實現(xiàn)類時,每次都需要區(qū)service中修改UserDao實例的指向

private UserDao userDao = new UserDaoImpl;
private UserDao userDao = new UserDaoOracleImpl;
private UserDao userDao = new UserDaoMySqlImpl;

這樣設(shè)計的耦合性極高,對程序執(zhí)行的控制權(quán)始終在開發(fā)人員手中,當用戶提出不同需求就需要我們不斷去修改UserDao實例的指向。如果代碼數(shù)量大,那么需要修改的就不止一處,下面在service中注入set方法來動態(tài)的獲取不同的UserDao實例指向

service:

public class UserServiceImpl implements UserService{private UserDao userDao;// 注入set方法  解耦public void setUserDao(UserDao userDao){this.userDao = userDao;}public void getUser() {userDao.getUser();}
}

Test:

public class MyTest {@Testpublic void testGetUser(){UserServiceImpl service = new UserServiceImpl();service.setUserDao(new UserDaoOracleImpl());service.getUser();}
}

上述示例,就可以動態(tài)的去選擇執(zhí)行用戶指定的方法。此處的Test可以看作是一個servlet,它獲取到用戶的請求之后解析出對應(yīng)執(zhí)行的方法,再通過service去調(diào)用執(zhí)行,耦合性就降低許多即用戶需求和程序之間的耦合性降低,程序執(zhí)行的控制權(quán)交給用戶。以此完成控制反轉(zhuǎn)IOC

IOC本質(zhì)

IOC的本質(zhì)就是一種控制反轉(zhuǎn)的設(shè)計思想,它不完全等同于DI,DI(依賴注入)可以理解為實現(xiàn)IOC的一種方式。

那我的理解其實是,不能說控制權(quán)交給了用戶,只是我們通過程序編寫可以實現(xiàn)對用戶需求的解析。解析出用戶的需求對應(yīng)程序中所要執(zhí)行的方法即可。不能理解為控制權(quán),只能說用戶具有了主動權(quán),并且在代碼層面我們提高了程序的動態(tài)特性。

所謂控制反轉(zhuǎn),就是說獲取對象的不再由程序的硬編碼決定,而是反轉(zhuǎn)到了用戶手中。首先程序會解析出用戶需求,再動態(tài)的獲取相應(yīng)對象

XML配置Spring

以上述UserDao示例配置

<?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/beans                         https://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 將每一個UserDao的實現(xiàn)類映射到Spring容器中的bean --><bean id="mysqlImpl" class="com.mountain.dao.MySqlImpl"/><bean id="oracleImpl" class="com.mountain.dao.OracleImpl"/><bean id="userService" class="com.mountain.service.UserServiceImpl"><property name="userDao" ref="mysqlImpl"/></bean>
</beans>

測試;

@Test
public void testGetUser(){// 獲取spring上下文對象ApplicationContext context = new ClassPathXmlApplicationContext("application-context.xml");UserServiceImpl service = (UserServiceImpl) context.getBean("userService");System.out.println(service.getUser());
}

可以看到,創(chuàng)建對象不需要再利用new關(guān)鍵字硬編碼,而是完全交給Spring容器進行創(chuàng)建,我們在xml配置中將每一個UserDao的實現(xiàn)類映射到Bean,最后測試利用Spring上下文對象來獲取映射好的bean實例

配置細節(jié):

  1. property標簽name對應(yīng)類中的字段,value是可以自定義的具體值,ref則是將該字段映射到具體某一個類上比如引用數(shù)據(jù)類型就會用到ref配置
  2. bean中的id要與最終用Spring上下文對象getBean獲取實例時的參數(shù)一致

IOC體現(xiàn):

  1. 對象的創(chuàng)建、管理全部交給Spring容器。主動權(quán)交給Spring
  2. 程序不在主動的創(chuàng)建對象,而是被動的接收對象
  3. 利用set方法注入

IOC創(chuàng)建對象方式

默認創(chuàng)建對象方式:

// 無參構(gòu)造
public User() {System.out.println("默認使用無參構(gòu)造");
}
// 測試
ApplicationContext context = new ClassPathXmlApplicationContext("application-Context.xml");
User user = (User) context.getBean("User");

最終打印:默認使用無參構(gòu)造,所以在不進行任何其他配置的情況下,Spring默認創(chuàng)建bean依然走無參構(gòu)造器

public User(String name) {}
<bean id="User" class="com.yuqu.pojo.User"><property name="name" value="情人節(jié)"/>
</bean>

如果我們只顯式了有參構(gòu)造,那么無參構(gòu)造被覆蓋之后將會導致application-Context.xml文件配置的bean編譯直接報錯

使用含參構(gòu)造時
方式一:

<!--  方式一:index代表構(gòu)造器參數(shù)索引  -->
<bean id="User" class="com.yuqu.pojo.User"><constructor-arg index="0" value="情人節(jié)"/>
</bean>

方式二:

<!--  方式二:type代表參數(shù)類型  基本數(shù)據(jù)類型用  弊端較大  -->
<bean id="User" class="com.yuqu.pojo.User"><constructor-arg type="java.lang.String" value="圣誕節(jié)"/>
</bean>

但是假設(shè)多個參數(shù)都是java.lang.String那么方式二就是不可取的

方式三:

<!--  方式三:直接通過參數(shù)名設(shè)置  -->
<bean id="User" class="com.yuqu.pojo.User"><constructor-arg name="name" value="國慶節(jié)"/>
</bean>
http://www.risenshineclean.com/news/41523.html

相關(guān)文章:

  • 小程序登錄后臺seo聯(lián)盟
  • 網(wǎng)站網(wǎng)址有哪些臨沂seo整站優(yōu)化廠家
  • 網(wǎng)站制作公司源碼北京百度競價托管
  • 深圳做網(wǎng)站的給說網(wǎng)店推廣有哪些
  • 做網(wǎng)站最好最佳的資源搜索引擎
  • 環(huán)保網(wǎng)站查詢碾米是否做備案做個網(wǎng)站需要多少錢
  • jsp網(wǎng)站開發(fā)實例教程北京廈門網(wǎng)站優(yōu)化
  • 廈門網(wǎng)站流量優(yōu)化價格app推廣平臺放單平臺
  • 無錫做網(wǎng)站6seo技術(shù)助理
  • 邵陽市城鄉(xiāng)建設(shè)廳網(wǎng)站網(wǎng)絡(luò)營銷是學什么的
  • 企業(yè)做自己的網(wǎng)站要注意什么window優(yōu)化大師
  • 模板網(wǎng)站演示站點怎么做口碑營銷案例2022
  • 主機怎么做網(wǎng)站二次跳轉(zhuǎn)怎么理解搜索引擎優(yōu)化
  • 網(wǎng)站掛馬怎么辦優(yōu)化網(wǎng)站排名方法教程
  • 阿里云ecs裝wordpress長沙的seo網(wǎng)絡(luò)公司
  • 男人和女人做受吃母乳視頻網(wǎng)站免費互聯(lián)網(wǎng)銷售是什么意思
  • 網(wǎng)站低保圖用什么做贛州seo外包
  • 站酷設(shè)計官方網(wǎng)站磁力下載
  • wordpress 圖片 cdn臺州seo優(yōu)化公司
  • WordPress建站 用插件怎么推廣軟件
  • 深圳建設(shè)交易中心網(wǎng)站首頁福州百度關(guān)鍵詞優(yōu)化
  • 網(wǎng)站建設(shè)我要自學網(wǎng)優(yōu)化網(wǎng)站關(guān)鍵詞的技巧
  • 如何選定目標關(guān)鍵詞及網(wǎng)站欄目名稱的確定企業(yè)建網(wǎng)站一般要多少錢
  • 太倉網(wǎng)站設(shè)計早晨設(shè)計泰州seo
  • 正版?zhèn)髌媸钟喂俜骄W(wǎng)站市場調(diào)研報告范文3000字
  • 南郊網(wǎng)站建設(shè)報價ks刷粉網(wǎng)站推廣馬上刷
  • 可以做微課ppt模板 網(wǎng)站有哪些網(wǎng)站制作開發(fā)
  • 為政府做網(wǎng)站的公司百度怎么發(fā)帖做推廣
  • wordpress登陸可見插件外貿(mào)網(wǎng)站推廣優(yōu)化
  • 北京注冊公司地址費用外貿(mào)建站seo