欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java Spring松耦合高效應(yīng)用簡(jiǎn)單實(shí)例分析

 更新時(shí)間:2016年12月08日 08:51:18   投稿:lqh  
在Java項(xiàng)目,龐大的對(duì)象依賴關(guān)系將一直緊密耦合引起對(duì)象難以管理或修改。在這種情況下,可以使用Spring框架作為一個(gè)核心模塊輕松高效地管理所有的對(duì)象依賴。本文章向大家介紹Spring松耦合的實(shí)例,需要的朋友可以參考一下。

java Spring松耦合

面向?qū)ο蟮母拍?,是一個(gè)很好的設(shè)計(jì)來(lái)打破系統(tǒng)進(jìn)入一個(gè)組可重用的對(duì)象。然而,當(dāng)系統(tǒng)變大,尤其是在Java項(xiàng)目,龐大的對(duì)象依賴關(guān)系將一直緊密耦合引起對(duì)象難以管理或修改。在這種情況下,可以使用Spring框架作為一個(gè)核心模塊輕松高效地管理所有的對(duì)象依賴。

輸出生成器的例子

讓我們來(lái)看一個(gè)例子,假設(shè)你的項(xiàng)目有一個(gè)函數(shù)輸出的內(nèi)容,以CSV或JSON格式。您的代碼可能看起來(lái)像下面的例子:

File : IOutputGenerator.java – 輸出生成器接口

package com.yiibai.output;

public interface IOutputGenerator
{
 public void generateOutput();
}
File : CsvOutputGenerator.java – 一個(gè)CSV輸出生成器用來(lái)實(shí)現(xiàn)IOutputGenerator接口。

package com.yiibai.output.impl;

import com.yiibai.output.IOutputGenerator;

public class CsvOutputGenerator implements IOutputGenerator
{
 public void generateOutput(){
 System.out.println("Csv Output Generator");
 }
}
File : JsonOutputGenerator.java – 一個(gè)JSON輸出生成器用來(lái)實(shí)現(xiàn)IOutputGenerator接口。

package com.yiibai.output.impl;

import com.yiibai.output.IOutputGenerator;

public class JsonOutputGenerator implements IOutputGenerator
{
 public void generateOutput(){
 System.out.println("Json Output Generator");
 }
}

有幾個(gè)方法來(lái)調(diào)用IOutputGenerator,以及如何使用 Spring 來(lái)避免對(duì)象相互結(jié)合緊密。

1. 方法1 – 直接調(diào)用

正常的方式,直接調(diào)用它。

package com.yiibai.common;

import com.yiibai.output.IOutputGenerator;
import com.yiibai.output.impl.CsvOutputGenerator;
/* http://www.manongjc.com/article/1602.html */
public class App 
{
  public static void main( String[] args )
  {
   IOutputGenerator output = new CsvOutputGenerator();
   output.generateOutput();
  }
}

存在問(wèn)題

以這種方式,這個(gè)問(wèn)題是“output”緊密到CsvOutputGenerator耦合,輸出生成的每一個(gè)變化可能涉及代碼變化。如果此代碼分散在你的項(xiàng)目中,輸出生成的每一次變化都會(huì)讓你受苦。 

方法2 – 用輔助類調(diào)用它

可能想創(chuàng)建一個(gè)輔助類將所有輸出實(shí)現(xiàn)在類的內(nèi)部。

package com.yiibai.output;

import com.yiibai.output.IOutputGenerator;
import com.yiibai.output.impl.CsvOutputGenerator;

public class OutputHelper
{
 IOutputGenerator outputGenerator;
 
 public OutputHelper(){
 outputGenerator = new CsvOutputGenerator();
 }
 
 public void generateOutput(){
 outputGenerator.generateOutput();
 }
 
}

通過(guò)輔助類調(diào)用它

package com.yiibai.common;

import com.yiibai.output.OutputHelper;

public class App 
{
  public static void main( String[] args )
  {
   OutputHelper output = new OutputHelper();
   output.generateOutput(); 
  }
}

存在問(wèn)題

這看起來(lái)比之前的更優(yōu)雅,只需要管理一個(gè)輔助類,但是輔助類仍是緊耦合 CsvOutputGenerator,輸出生成的每一個(gè)變化仍然涉及小的代碼更改。

方法3 – Spring

在這種情況下,Spring 依賴注入(DI)是一個(gè)不錯(cuò)的選擇。Spring 可以讓輸出生成松散的耦合到輸出發(fā)生器。

OutputHelper類更小的修改。

package com.yiibai.output;

import com.yiibai.output.IOutputGenerator;

public class OutputHelper
{
 IOutputGenerator outputGenerator;
 
 public void generateOutput(){
 outputGenerator.generateOutput();
 }
 
 public void setOutputGenerator(IOutputGenerator outputGenerator){
 this.outputGenerator = outputGenerator;
 }
}

創(chuàng)建一個(gè) Spring bean 的配置文件,并在這里聲明所有的Java對(duì)象的依賴。

<!-- Spring-Common.xml -->
<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
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

 <bean id="OutputHelper" class="com.yiibai.output.OutputHelper">
 <property name="outputGenerator" ref="CsvOutputGenerator" />
 </bean>
 
 <bean id="CsvOutputGenerator" class="com.yiibai.output.impl.CsvOutputGenerator" />
 <bean id="JsonOutputGenerator" class="com.yiibai.output.impl.JsonOutputGenerator" />
 
</beans>

通過(guò)Spring來(lái)調(diào)用它

package com.yiibai.common;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.yiibai.output.OutputHelper;

public class App 
{
  public static void main( String[] args )
  {
   ApplicationContext context = 
    new ClassPathXmlApplicationContext(new String[] {"Spring-Common.xml"});

   OutputHelper output = (OutputHelper)context.getBean("OutputHelper");
   output.generateOutput();
    
  }
}

現(xiàn)在,只需要改變 Spring XML 文件使用不同的輸出生成器。只修改 Spring XML 文件而不需要無(wú)碼修改,這意味著更少的錯(cuò)誤。 

結(jié)論:有了Spring框架 - 這種依賴注入(DI)為對(duì)象的依賴關(guān)系管理有用的特性,使大型Java項(xiàng)目開(kāi)發(fā)管理中更優(yōu)雅的,高度靈活和便于維護(hù)。

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • hadoop上傳文件功能實(shí)例代碼

    hadoop上傳文件功能實(shí)例代碼

    這篇文章主要介紹了hadoop上傳文件功能實(shí)例代碼,需要的朋友可以參考下
    2017-09-09
  • Java獲取用戶IP屬地模擬抖音詳解

    Java獲取用戶IP屬地模擬抖音詳解

    細(xì)心的小伙伴可能會(huì)發(fā)現(xiàn),抖音新上線了 IP 屬地的功能,小伙伴在發(fā)表動(dòng)態(tài)、發(fā)表評(píng)論以及聊天的時(shí)候,都會(huì)顯示自己的 IP 屬地信息,本篇文章我們來(lái)模擬實(shí)現(xiàn)這一功能
    2022-07-07
  • Java?Controller實(shí)現(xiàn)參數(shù)驗(yàn)證與統(tǒng)一異常處理流程詳細(xì)講解

    Java?Controller實(shí)現(xiàn)參數(shù)驗(yàn)證與統(tǒng)一異常處理流程詳細(xì)講解

    Controller是Spring接受并處理網(wǎng)頁(yè)請(qǐng)求的組件,是整個(gè)應(yīng)用的入口,因此學(xué)會(huì)Controller的常用注解對(duì)理解一個(gè)應(yīng)用是重中之重。SpringBoot的Controller中經(jīng)常會(huì)用到注解@Controller、@RestController、@RequestMapping、@RequestBody等
    2023-01-01
  • Java中操作數(shù)組的Arrays類

    Java中操作數(shù)組的Arrays類

    大家好,本篇文章主要講的是Java中操作數(shù)組的Arrays類,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02
  • SpringCloud-Alibaba-Nacos啟動(dòng)失敗解決方案

    SpringCloud-Alibaba-Nacos啟動(dòng)失敗解決方案

    這篇文章主要介紹了SpringCloud-Alibaba-Nacos啟動(dòng)失敗解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • SpringBoot如何配置獲取request中body的json格式參數(shù)

    SpringBoot如何配置獲取request中body的json格式參數(shù)

    這篇文章主要介紹了SpringBoot如何配置獲取request中body的json格式參數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 詳解Java日志正確使用姿勢(shì)

    詳解Java日志正確使用姿勢(shì)

    這篇文章主要介紹了Java日志正確使用姿勢(shì),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Java數(shù)據(jù)結(jié)構(gòu)與算法學(xué)習(xí)之雙向鏈表

    Java數(shù)據(jù)結(jié)構(gòu)與算法學(xué)習(xí)之雙向鏈表

    雙向鏈表也叫雙鏈表,是鏈表的一種,它的每個(gè)數(shù)據(jù)結(jié)點(diǎn)中都有兩個(gè)指針,分別指向直接后繼和直接前驅(qū)。所以,從雙向鏈表中的任意一個(gè)結(jié)點(diǎn)開(kāi)始,都可以很方便地訪問(wèn)它的前驅(qū)結(jié)點(diǎn)和后繼結(jié)點(diǎn)。本文將為大家詳細(xì)介紹雙向鏈表的特點(diǎn)與使用,需要的可以參考一下
    2021-12-12
  • 基于selenium 獲取新頁(yè)面元素失敗的解決方法

    基于selenium 獲取新頁(yè)面元素失敗的解決方法

    今天小編就為大家分享一篇基于selenium 獲取新頁(yè)面元素失敗的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • Spring?IOC容器Bean注解創(chuàng)建對(duì)象組件掃描

    Spring?IOC容器Bean注解創(chuàng)建對(duì)象組件掃描

    這篇文章主要為大家介紹了Spring?IOC容器Bean注解創(chuàng)建對(duì)象組件掃描,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05

最新評(píng)論