首頁>Club>
10
回覆列表
  • 1 # BinW927

    一:控制反轉

    **1.**Spring 三個核心思想是什麼:控制反轉,依賴注入和麵向切面程式設計。

    **2.**Spring最核心,最基礎的概念是什麼?將spring類比java,java最核心,最基礎的概念就是object了。java中,所有的操作都是針對object的(基礎型別除外),java中,一切皆物件,一切都是object。類比下來,spring中最基礎的概念是bean。在spring中,所以的類都可以認為是一個bean。(個人認為)在spring中的所有檔案,都可以認為是註冊了的bean和未註冊的bean。 spring中所有操作都是針對bean的操作。自然,spring的三大核心思想中操作的物件,也是bean.

    3.程式碼講解IOC控制反轉

    (1)定義一個介面 public interface IPrint { /** * onLine: 物件需要實現這個方法來實現列印物件的功能 * void 返回型別 */ String printObject(); } 1 2 3 4 5 6 7 8

    (2)實現介面 public class UserBean implements IPrint{ @Override public String printObject() { // TODO Auto-generated method stub System.out.println("列印物件UserBean:"); return "abc"; } } public class MyBean implements IPrint{ @Override public String printObject() { // TODO Auto-generated method stub System.out.println("列印物件MyBean:"); return null; } } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

    (3)測試 IPrint print = new UserBean(); print.printObject(); 1 2 很正常的執行結果(“列印物件UserBean:”)。但是這時候我想修改一下,列印第二個實現類,這時候就需要修改程式碼了,修改程式碼畢竟是不符合開閉原則,又比較麻煩的事,這時候就需要用到spring的控制反轉:對繼承了介面IPrint的具體實現類的具體物件的建立,不依賴於呼叫他的客戶端程式碼,而將控制權交給spring(其實就是xml檔案),這就是控制反轉。

    4.控制反轉實現 測試類: /讀取配置檔案(將配置檔案中的bean載入進記憶體) ApplicationContext ctx = new ClassPathXmlApplicationContext("/testSpring/resources/applicationContext.xml"); //獲取的例項 IPrint bean=(IPrint)ctx.getBean("userBean"); //呼叫方法 bean.printObject(); 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 如果想要列印另一個實現類,只要修改配置檔案:

    1 總結:從spring的控制反轉實現可以看出,客戶端的實現不必去修改程式碼,從而達到了松耦合的目的。控制反轉最後就是將主動權交給介面。

    二:依賴注入 常用的注入方式有四種: 1. 屬性注入 2. 構造方法注入 3. 工廠方法注入 4. 註解注入 (1)屬性注入 package test; public class User { private String name; private String gender; public String getName() { return name; } public User(String name, Integer age) { this.name = name; this.age = age; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } @Override public String toString() { return "User [name=" + name + ", gender=" + gender + "]"; } } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

    spring.xml檔案配置: 1 2 3 4 測試函式: public static void main(String args[]){ ApplicationContext atc = new ClassPathXmlApplicationContext("spring.xml"); User user = (User) atc.getBean("user"); System.out.println(user);//print User [name=cup, gender=man] } 1 2 3 4 5 6 而如果我們把POJO中的getName方法去掉,結果不變,但setName方法刪掉,我們再執行程式,會看到

    2)建構函式注入: 在xml檔案定義Bean: 呼叫測試函式: public static void main(String args[]){ ApplicationContext atc = new ClassPathXmlApplicationContext("spring.xml"); User user = (User) atc.getBean("user1"); System.out.println(user.getName() + "——" + user.getAge()); //print cup——25 } 1 2 3 4 5 6 7 8

    (3)工廠方法注入 i.非靜態工廠方法 先定義工廠類: package test; public class UserFactory { public User createUser(){ User user = new User("cup",25); return user; } } 1 2 3 4 5 6 7 8 進行Bean配置: 1 2 呼叫測試函式: public static void main(String args[]){ ApplicationContext atc = new ClassPathXmlApplicationContext("spring.xml"); User user = (User) atc.getBean("user3"); System.out.println(user.getName() +" ——"+ user.getAge() ); //print cup——25 } 1 2 3 4 5 6 (4)註解注入 i. 對類成員變數註解 使用@Autowire實現自動注入,格式如: @Component public class IdCard{ ..... } 1 2 3 4 public class User{ //Autowired預設按型別注入,@required 表明如果找不到對應的bean則為null,但如果設定為true(也是預設值),則要求一定要找到匹配的bean,否則會丟擲異常。 //Qualifier常用於容器有一個以上相同型別的Bean,透過指定名字來指定唯一的Bean @Autowired(required = false ) @Qualifier("idCard") private IdCard idCard;//也可以將IdCard配置在xml檔案中注入 ..... } 1 2 3 4 5 6 7 8 ii. 對類成員方法進行註解 @Autowired public void init(@Qualifier(“usar1")User user1,@Qualifier("user2")User user2){ this.user1 = user1; this.user2 = user2; }

  • 2 # 程式設計師米兜

    01前言

    Spring的核心技術有哪些?為什麼要選擇這個問題回答暱?其一是想總結一下Spring知識;其二是想查漏補缺,更深度理解一下Spring。下面主要過一些知識點,深度的話還得後期一起探討。

    02知識點

    我就不廢話了,該上圖的上圖,該略過的略過,主要的知識點如下:

    1.Spring的整體架構

    Spring框架是一個分層架構,它包含一系列的功能要素,並被分為大約20個模組,如下圖所以(該圖偷自網路):

    Core Container

    Data Access/Integration

    Web

    AOP

    Test

    至於每個模組,主要的核心內容暫時就先略過,可以自主學習。

    2.容器的實現

    容器是Spring的基礎模組,同時也是核心模組,這部分主要介紹Spring作為大水桶,它是怎麼裝Bean的,這得自行深挖了。

    3.預設標籤解析

    在Bean配置檔案中,相關標籤怎麼用的,這就得自己看看這個模組相關內容了。

    4.自定義標籤解析

    自定義標籤是跟預設標籤如出一轍的,如果不想用預設標籤,那就得自己配置了,這又怎麼完暱?這就得大家自主學習了。

    5.bean載入

    Spring作為一個大水桶,我們怎麼運用好桶裡面的水,這就得好好了解一下水,除了喝還能怎麼用了。

    6.容器的功能拓展

    在Spring學習中,一般以BeanFactory介面以及它的預設實現類XmlBeanFactory為例進行分析,但是Spring中還提供了另一個介面ApplicationContext,用於擴充套件BeanFactory中現有的功能。

    7.AOP

    8.資料庫連線JDBC

    9.整合Mybatis

    10.事務

    11.Spring MVC

    12.遠端服務

    13.Spring訊息

    14.Spring boot

    Spring Boot是一個簡化Spring開發的框架。用來監護spring應用開發,約定大於配置,去繁就簡,just run 就能建立一個獨立的,產品級的應用。

    我們在使用Spring Boot時只需要配置相應的Spring Boot就可以用所有的Spring元件,簡單的說,spring boot就是整合了很多優秀的框架,不用我們自己手動的去寫一堆xml配置然後進行配置。從本質上來說,Spring Boot就是Spring,它做了那些沒有它你也會去做的Spring Bean配置。

    想簡單全面瞭解Spring Boot的,推薦這個開源專案供大家學習:

    https://github.com/dyc87112/SpringBoot-Learning/tree/1.x

    15.Spring Cloud

    Spring Cloud是一系列框架的有序集合。它利用Spring Boot的開發便利性巧妙地簡化了分散式系統基礎設施的開發,如服務發現註冊、配置中心、訊息匯流排、負載均衡、斷路器、資料監控等,都可以用Spring Boot的開發風格做到一鍵啟動和部署。

    想簡單全面瞭解Spring Cloud的,推薦這個開源專案供大家學習:

    https://github.com/StarskyBoy/cloud

    03總結

    本文只想簡單回答一下開頭提出來的問題。並未展開分析,大家可以對著加粗的字型,看一看自己那些瞭如指掌了,那些還需繼續修行。只要大家看了心中有數,我感覺我的回答也是接近及格的。

  • 3 # 是國鋒呀

    一、Spring不近是一個框架,已然成為一種生態。

    二、簡化開發

    2.1基於POJO的輕量級和最小侵入性程式設計

    2.2透過依賴注入和麵向介面松耦合

    2.3基於切面和宣告式程式設計

    2.4透過切面和模板減少樣板式程式碼

    三、Spring系統架構圖

    四、spring之核心模組

    模組名稱 主要功能

    spring-core 依賴注入IOC與DI的最基本實現

    spring-beans Bean工廠與Bean的裝配

    spring-context 定義基礎的spring的Context上下文及IOC容器

    spring-context-support 對springIOC容器的擴充套件,以及IOC子容器

    spring-context-indexer Spring類管理元件和Classpath掃描

    spring-expression Spring表示式語言

    五、spring之切面程式設計模組

    模組名稱 主要功能

    spring-aop 面向切面程式設計的應用模組

    spring-aspects 整合AspectJ,AOP應用框架

    spring-instrument 動態Class Loading 模組

    六、spring之資料訪問與整合模組

    模組名稱 主要功能

    spring-jdbc spring提供JDBC抽象框架的主要實現模組,簡化Spring jdbc操作

    spring-tx Spring jdbc事物控制實現模組

    spring-orm 主要整合Hibernate,Jpa,java Date Objects

    spring-jms java Messaging service能夠傳送和接收資訊

    spring-oxm java對像對映XML資料,或者將XML資料對映成Java物件

    七、spring之web模組

    模組名稱 主要功能

    spring-web 提供web支援,主要建立與核心容器之上,透過Sercvlet或者 Listeners初始化IOC容器

    spring-webmvc 實現springMVC(model-view-Controller)的web應用

    spring-websocket 主要是與web前端的全雙工通訊的協議

    spring-webflux 新的非堵塞函式式Reactive Web 框架,可以用來建立非同步的,非 阻塞,事件驅動服務

    八、spring之通訊報

    模組名稱 主要功能

    spring-messaging spring框架整合一些基礎的報文傳送應用

    九、spring之整合測試

    模組名稱 主要功能

    spring-test 提供測試支援

    十、spring各模組之間的依賴關係

  • 中秋節和大豐收的關聯?
  • 如何評價明末將軍祖大壽?他為什麼投降清朝?