国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

EJB和Spring

這篇具有很好參考價(jià)值的文章主要介紹了EJB和Spring。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1. EJB

1.1. 背景

功能日趨復(fù)雜的軟件,如果把所有的功能實(shí)現(xiàn)都放在客戶(hù)端,不僅代碼沒(méi)有安全性,部署及發(fā)布運(yùn)維都會(huì)變的很復(fù)雜,所以將軟件的功能實(shí)現(xiàn)分為客戶(hù)端和服務(wù)端,服務(wù)端和客戶(hù)端之間通過(guò)網(wǎng)絡(luò)調(diào)用進(jìn)行功能實(shí)現(xiàn)。

客戶(hù)端只做界面展示和數(shù)據(jù)交互,功能的實(shí)現(xiàn)統(tǒng)統(tǒng)交給服務(wù)端去做,但這不是前后端分離的意思,而是部署及功能實(shí)現(xiàn)的問(wèn)題。

整個(gè)的這個(gè)實(shí)現(xiàn)方案對(duì)應(yīng)的技術(shù)就是Java EE(Java Platform,Enterprise Edition),JavaEE提供了廣泛的企業(yè)級(jí)特性和服務(wù),由Sun公司為企業(yè)級(jí)應(yīng)用推出的標(biāo)準(zhǔn)平臺(tái),也可以說(shuō)是一種開(kāi)發(fā)思路或者模范。包含了我們現(xiàn)在java開(kāi)發(fā)的眾多標(biāo)準(zhǔn)技術(shù)-13項(xiàng)核心技術(shù)規(guī)范

  1. JDBC(Java Database Connectivity):Java數(shù)據(jù)庫(kù)連接。
  2. JNDI(Java Naming and Directory Interface):Java的命名和目錄接口。
  3. EJB(Enterprise JavaBean):企業(yè)級(jí)JavaBean。(早已被spring替代了)
  4. RMI(Remote Method Invoke):遠(yuǎn)程方法調(diào)用。
  5. Java IDL(Interface Description Language)/ CORBA(Common Object Broker Architecture):接口定義語(yǔ)言/公用對(duì)象請(qǐng)求代理程序體系結(jié)構(gòu)。
  6. JSP(Java Server Pages):Java服務(wù)端頁(yè)面,一種動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)標(biāo)準(zhǔn)。
  7. Sevlet(Server Applet):Java服務(wù)端程序。
  8. XML(Extensible Markup Language):可擴(kuò)展標(biāo)記語(yǔ)言。
  9. JMS(Java Messages Service):Java消息服務(wù)。
  10. JTA(Java Transaction API):Java事務(wù)API。
  11. JTS(Java Transaction Service):Java事務(wù)服務(wù)。
  12. JavaMail:Java處理電子郵件的相關(guān)接口。
  13. JAF(JavaBean Activation Framework):數(shù)據(jù)處理框架。

在JavaEE的開(kāi)發(fā)思路下,整個(gè)軟件實(shí)現(xiàn)就會(huì)分為三層:

  • 視圖層或表現(xiàn)層:提供用戶(hù)界面,接收用戶(hù)輸入,數(shù)據(jù)輸出。Web應(yīng)用的情況,JSP以及Servlet屬于視圖層組件。
  • 業(yè)務(wù)邏輯層:實(shí)際的業(yè)務(wù)邏輯處理。根據(jù)視圖層傳送過(guò)來(lái)的數(shù)據(jù),進(jìn)行實(shí)際的業(yè)務(wù)邏輯處理(包括數(shù)據(jù)庫(kù)的查詢(xún),更新等),再把處理后的結(jié)果返回給視圖層。EJB,以及不使用EJB的情況下?lián)?dāng)業(yè)務(wù)邏輯處理部分的JavaBean等歸屬于業(yè)務(wù)邏輯層組件。
  • 數(shù)據(jù)持久化層:多指用于保存業(yè)務(wù)數(shù)據(jù)的數(shù)據(jù)庫(kù),也可以是文件等。

商務(wù)軟件的核心部分是它的業(yè)務(wù)邏輯。業(yè)務(wù)邏輯抽象了整個(gè)商務(wù)過(guò)程的流程,并使用計(jì)算機(jī)語(yǔ)言將他們實(shí)現(xiàn)。J2EE 對(duì)于這個(gè)問(wèn)題的處理方法是將業(yè)務(wù)邏輯從客戶(hù)端軟件中抽取出來(lái),封裝在一個(gè)組件中。這個(gè)組件運(yùn)行在一個(gè)獨(dú)立的服務(wù)器上,客戶(hù)端軟件通過(guò)網(wǎng)絡(luò)調(diào)用組件提供的服務(wù)以實(shí)現(xiàn)業(yè)務(wù)邏輯,而客戶(hù)端軟件的功能單純到只負(fù)責(zé)發(fā)送調(diào)用請(qǐng)求和顯示處理結(jié)果。在J2EE 中, 這個(gè)運(yùn)行在一個(gè)獨(dú)立的服務(wù)器上,并封裝了業(yè)務(wù)邏輯的組件就是EJB(Enterprise Java Bean)組件。所以EJB是屬于J2EE(Java EE)體系結(jié)構(gòu)中的業(yè)務(wù)邏輯層部分。

題外話(huà):Java剛開(kāi)始的時(shí)候,因?yàn)楦鞣N應(yīng)用和生態(tài)不成熟,很多東西需要有人牽頭制定強(qiáng)制規(guī)范引導(dǎo)Java的發(fā)展,于是JavaEE曾經(jīng)引領(lǐng)了企業(yè)級(jí)應(yīng)用的開(kāi)發(fā)。但隨著時(shí)代的進(jìn)步越來(lái)越多的公司和組織參與到Java世界,出現(xiàn)了各種各樣的JavaEE組件的代替者,比如Hibernate、Spring就是其中兩個(gè)典型。相反,Java官方制定的各種JavaEE規(guī)范反而不太受歡迎,他們制定了JSF規(guī)范,但實(shí)際企業(yè)開(kāi)發(fā)喜歡用Struts 2、Spring MVC;他們制定了EJB規(guī)范,但實(shí)際企業(yè)開(kāi)發(fā)還是喜歡用Spring;他們制定了JPA規(guī)范,但實(shí)際企業(yè)開(kāi)發(fā)往往還是喜歡直接用Hibernate、MyBatis?,F(xiàn)代企業(yè)級(jí)應(yīng)用常用的各種框架和工具,比如Struts 2、Spring、Hibernate、jBPM、Activiti、Lucene、Hadoop、Drools、CXF等這些大家耳熟能詳?shù)慕M件,全部都不是來(lái)自O(shè)racle官方,但是卻在企業(yè)應(yīng)用中開(kāi)發(fā)經(jīng)常用到的。現(xiàn)在企業(yè)里面,真正常用的JavaEE規(guī)范有什么?Servlet、JSP、JMS、JNDI。這些技術(shù)都只是充當(dāng)了一個(gè)程序的入口而已。

1.2. 詳解

以上是EJB出現(xiàn)的原因,現(xiàn)在還需要詳細(xì)看看EJB實(shí)現(xiàn)的功能,EJB組件運(yùn)行在EJB容器之中,EJB容器是一個(gè)EJB引擎,它提供了EJB組件運(yùn)行的環(huán)境,并對(duì)EJB組件進(jìn)行管理。EJB容器一般包含在EJB服務(wù)器(或應(yīng)用服務(wù)器)中,EJB服務(wù)器可以擁有一到多個(gè)EJB容器。比較有名的支持EJB的服務(wù)器有Sun One,Interstage,Websphere,Weblogic,JBoss,JRun等。

調(diào)用EJB組件的一方被稱(chēng)為EJB客戶(hù)端。EJB客戶(hù)端可以為運(yùn)行在WEB容器中的JSP,SERVLET;或者一般的Java Application,Applet;或者Web Service;也可以是別的EJB組件。

EJB客戶(hù)端與EJB服務(wù)器可處于同一JVM環(huán)境中,也可處于不同計(jì)算機(jī)的不同JVM環(huán)境。

EJB提供了一種簡(jiǎn)化復(fù)雜性的機(jī)制,使開(kāi)發(fā)人員可以關(guān)注業(yè)務(wù)邏輯,而不是底層的復(fù)雜性,例如事務(wù)管理,安全性,遠(yuǎn)程訪(fǎng)問(wèn)等。

1.2.1. EJB的存在原因

  • 簡(jiǎn)化開(kāi)發(fā):EJB將復(fù)雜的事務(wù)和安全管理交給了服務(wù)器,使開(kāi)發(fā)人員能夠?qū)W⒂陂_(kāi)發(fā)業(yè)務(wù)邏輯。
  • 標(biāo)準(zhǔn)化:EJB提供了一種標(biāo)準(zhǔn)化的方式來(lái)開(kāi)發(fā)分布式應(yīng)用,這使得不同的開(kāi)發(fā)者和團(tuán)隊(duì)之間的協(xié)作變得更加簡(jiǎn)單。
  • 可移植性:由于EJB是基于Java EE規(guī)范的,所以EJB應(yīng)用程序可以在任何符合Java EE規(guī)范的服務(wù)器上運(yùn)行,這增加了應(yīng)用的可移植性。

1.2.2. EJB解決的問(wèn)題

  • 事務(wù)管理:EJB容器自動(dòng)處理了事務(wù)的開(kāi)始、提交和回滾,開(kāi)發(fā)者不必自己編寫(xiě)這些代碼。
  • 安全性:EJB容器可以處理用戶(hù)的認(rèn)證和授權(quán),為應(yīng)用程序提供安全性保障。
  • 并發(fā)處理:EJB容器能夠管理并發(fā)訪(fǎng)問(wèn),為開(kāi)發(fā)者處理多線(xiàn)程問(wèn)題。
  • 分布式計(jì)算:EJB容器提供了遠(yuǎn)程方法調(diào)用(RMI)的支持,使得在分布式環(huán)境中進(jìn)行通信變得簡(jiǎn)單。
  • 生命周期管理:EJB容器負(fù)責(zé)EJB對(duì)象的創(chuàng)建和銷(xiāo)毀,開(kāi)發(fā)者不必關(guān)心這些底層的細(xì)節(jié)。

1.2.3. EJB的基本組成部分:

  • 會(huì)話(huà)Bean(Session Beans):會(huì)話(huà)Bean用于執(zhí)行服務(wù)器上的業(yè)務(wù)邏輯,它可以是有狀態(tài)的(Stateful),也可以是無(wú)狀態(tài)的(Stateless)。
  • 實(shí)體Bean(Entity Beans):實(shí)體Bean用于封裝在數(shù)據(jù)庫(kù)中存儲(chǔ)的業(yè)務(wù)對(duì)象的數(shù)據(jù)和業(yè)務(wù)邏輯。實(shí)體Bean在EJB 3.0之后被JPA(Java Persistence API)取代。
  • 消息驅(qū)動(dòng)Bean(Message-Driven Beans):消息驅(qū)動(dòng)Bean用于異步處理由JMS(Java Message Service)發(fā)送的消息。

1.3. 示例

Session Beans是EJB的一種類(lèi)型,主要用于執(zhí)行業(yè)務(wù)邏輯。它們不直接代表數(shù)據(jù)庫(kù)中的數(shù)據(jù),而是封裝了一組業(yè)務(wù)操作,這些操作可以被客戶(hù)端程序調(diào)用。Session Beans有兩種類(lèi)型:無(wú)狀態(tài)(Stateless)和有狀態(tài)(Stateful)。

  • 無(wú)狀態(tài)會(huì)話(huà)Bean(Stateless Session Beans):不保持任何客戶(hù)端特定的會(huì)話(huà)狀態(tài)。當(dāng)一個(gè)方法調(diào)用完成后不會(huì)保留任何關(guān)于客戶(hù)端的信息。這意味著你可以在多個(gè)客戶(hù)端之間共享一個(gè)無(wú)狀態(tài)Bean的實(shí)例,因?yàn)樗痪S護(hù)任何關(guān)于客戶(hù)端的狀態(tài)信息。它的一個(gè)主要優(yōu)點(diǎn)是它們可以被高效地池化和復(fù)用,可以處理大量的請(qǐng)求,而不需要為每個(gè)客戶(hù)端創(chuàng)建一個(gè)新的Bean實(shí)例。

  • 有狀態(tài)會(huì)話(huà)Bean(Stateful Session Beans):會(huì)保持與特定客戶(hù)端相關(guān)的會(huì)話(huà)狀態(tài)。這個(gè)狀態(tài)會(huì)在客戶(hù)端和Bean之間的多個(gè)方法調(diào)用之間保持,并在會(huì)話(huà)結(jié)束時(shí)被銷(xiāo)毀。它的一個(gè)主要優(yōu)點(diǎn)是它們可以保存客戶(hù)端的狀態(tài),這使得它們非常適合在需要維護(hù)會(huì)話(huà)狀態(tài)的應(yīng)用中使用。例如,如果你正在開(kāi)發(fā)一個(gè)在線(xiàn)購(gòu)物應(yīng)用,你可能需要一個(gè)有狀態(tài)Bean來(lái)保存用戶(hù)的購(gòu)物車(chē)信息。然而,有狀態(tài)Bean的一個(gè)主要缺點(diǎn)是它們不能被共享和復(fù)用,因?yàn)樗鼈儽4媪丝蛻?hù)端特定的狀態(tài)。這意味著如果有大量的客戶(hù)端,你可能需要?jiǎng)?chuàng)建大量的有狀態(tài)Bean實(shí)例,這可能會(huì)消耗大量的資源。

項(xiàng)目目錄樹(shù)
EJB和Spring,spring系列,spring
pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>EJBAnHour</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>8.0</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>EJBAnHour</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.2.3</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

Hello2Servlet.java

package org.example;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.logging.Logger;

@WebServlet("/hello2")
public class Hello2Servlet extends HttpServlet {

    private static final Logger LOGGER = Logger.getLogger(Hello2Servlet.class.getName());

    public Hello2Servlet() {
        LOGGER.info("Hello2Servlet is created");
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        LOGGER.info("doGet method is called");
        resp.getWriter().write("Hello from Hello2Servlet!");
    }
}

HelloEJB.java

package org.example;

import javax.ejb.Stateless;

@Stateless
public class HelloEJB {
    public String sayHello() {
        return "Hello, EJB!";
    }
}

HelloServlet.java

package org.example;

import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {

    @EJB
    private HelloEJB helloEJB;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write(helloEJB.sayHello());
    }
}

運(yùn)行結(jié)果
EJB和Spring,spring系列,spring

1.4. 總結(jié)

  • EJB實(shí)現(xiàn)原理: 就是把原來(lái)放到客戶(hù)端實(shí)現(xiàn)的代碼放到服務(wù)器端,并依靠RMI進(jìn)行通信。
  • RMI實(shí)現(xiàn)原理 :就是通過(guò)Java對(duì)象可序列化機(jī)制實(shí)現(xiàn)分布計(jì)算。
  • 服務(wù)器集群: 就是通過(guò)RMI的通信,連接不同功能模塊的服務(wù)器,以實(shí)現(xiàn)一個(gè)完整的功能。

2. Spring

2.1. Spring Framework

早期的 J2EE(Java EE 平臺(tái))推崇以 EJB 為核心的開(kāi)發(fā)方式,但這種開(kāi)發(fā)方式在實(shí)際的開(kāi)發(fā)過(guò)程中存在種種弊端,例如使用復(fù)雜、代碼臃腫、代碼侵入性強(qiáng)、開(kāi)發(fā)周期長(zhǎng)、移植難度大等。

Rod Johnson 在其 2004 年編著的暢銷(xiāo)書(shū)《Expert One-on-One J2EE Development without EJB》中,針對(duì) EJB 各種臃腫的結(jié)構(gòu)進(jìn)行了逐一的分析和否定,并分別以更加簡(jiǎn)潔的方式進(jìn)行了替換。這本書(shū)影響甚遠(yuǎn),后來(lái) Rod Johnson 將 com.interface21 的代碼開(kāi)源,并把這個(gè)新框架并命名為“Spring”,含義為:Spring 像一縷春風(fēng)一樣,掃平傳統(tǒng) J2EE 的寒冬。

  • 廣義spring:以 Spring Framework 為核心的 Spring 技術(shù)棧,經(jīng)過(guò)十多年的發(fā)展,Spring 已經(jīng)不再是一個(gè)單純的應(yīng)用框架,而是逐漸發(fā)展成為一個(gè)由多個(gè)不同子項(xiàng)目(模塊)組成的成熟技術(shù),例如 Spring Framework、Spring MVC、SpringBoot、Spring Cloud、Spring Data、Spring Security 等,其中 Spring Framework 是其他子項(xiàng)目的基礎(chǔ)。
  • 狹義spring:特指Spring Framework,通常我們將它稱(chēng)為 Spring 框架

Spring 框架是一個(gè)分層的、面向切面的 Java 應(yīng)用程序的一站式輕量級(jí)解決方案,它是 Spring 技術(shù)棧的核心和基礎(chǔ),是為了解決企業(yè)級(jí)應(yīng)用開(kāi)發(fā)的復(fù)雜性而創(chuàng)建的。Spring 有兩個(gè)核心部分: IoC 和 AOP。

  • IOC:Inverse of Control 的簡(jiǎn)寫(xiě),譯為“控制反轉(zhuǎn)”,指把創(chuàng)建對(duì)象過(guò)程交給 Spring 進(jìn)行管理。
  • AOP:Aspect Oriented Programming 的簡(jiǎn)寫(xiě),譯為“面向切面編程”。 AOP 用來(lái)封裝多個(gè)類(lèi)的公共行為,將那些與業(yè)務(wù)無(wú)關(guān),卻為業(yè)務(wù)模塊所共同調(diào)用的邏輯封裝起來(lái),減少系統(tǒng)的重復(fù)代碼,降低模塊間的耦合度。另外,AOP 還解決一些系統(tǒng)層面上的問(wèn)題,比如日志、事務(wù)、權(quán)限等。

spring框架的特點(diǎn):

  • 方便解耦,簡(jiǎn)化開(kāi)發(fā)
    Spring 就是一個(gè)大工廠,可以將所有對(duì)象的創(chuàng)建和依賴(lài)關(guān)系的維護(hù)交給 Spring 管理。

  • 方便集成各種優(yōu)秀框架
    Spring 不排斥各種優(yōu)秀的開(kāi)源框架,其內(nèi)部提供了對(duì)各種優(yōu)秀框架(如 Struts2、Hibernate、MyBatis 等)的直接支持。

  • 降低 Java EE API 的使用難度
    Spring 對(duì) Java EE 開(kāi)發(fā)中非常難用的一些 API(JDBC、JavaMail、遠(yuǎn)程調(diào)用等)都提供了封裝,使這些 API 應(yīng)用的難度大大降低。

  • 方便程序的測(cè)試
    Spring 支持 JUnit4,可以通過(guò)注解方便地測(cè)試 Spring 程序。

  • AOP 編程的支持
    Spring 提供面向切面編程,可以方便地實(shí)現(xiàn)對(duì)程序進(jìn)行權(quán)限攔截和運(yùn)行監(jiān)控等功能。

  • 聲明式事務(wù)的支持
    只需要通過(guò)配置就可以完成對(duì)事務(wù)的管理,而無(wú)須手動(dòng)編程。

4 個(gè) jar 文件是 Spring 框架的基礎(chǔ)包,分別對(duì)應(yīng) Spring 容器的四個(gè)模塊:

  • spring-core-x.x.xx.jar 包含 Spring 框架基本的核心工具類(lèi),Spring 其他組件都要用到這個(gè)包中的類(lèi),是其他組件的基本核心。
  • spring-beans-x.x.xx.jar 所有應(yīng)用都要用到的,它包含訪(fǎng)問(wèn)配置文件、創(chuàng)建和管理 Bean 以及進(jìn)行 Inversion of Control(IoC)或者 Dependency Injection(DI)操作相關(guān)的所有類(lèi)。
  • spring-context-x.x.xx.jar Spring 提供在基礎(chǔ) IoC 功能上的擴(kuò)展服務(wù),此外還提供許多企業(yè)級(jí)服務(wù)的支持,如郵件服務(wù)、任務(wù)調(diào)度、JNDI 定位、EJB 集成、遠(yuǎn)程訪(fǎng)問(wèn)、緩存以及各種視圖層框架的封裝等。
  • spring-expression-x.x.xx.jar 定義了 Spring 的表達(dá)式語(yǔ)言。
  • 需要注意的是,在使用 Spring 開(kāi)發(fā)時(shí),除了 Spring 自帶的 JAR 包以外,還需要一個(gè)第三方 JAR 包 commons.logging 處理日志信息。

傳統(tǒng)的spring項(xiàng)目只能使用xml文件來(lái)注入管理bean,Spring 從 2.5 版本開(kāi)始提供了對(duì)注解技術(shù)的全面支持,我們可以使用注解來(lái)實(shí)現(xiàn)自動(dòng)裝配,簡(jiǎn)化 Spring 的 XML 配置。Spring 通過(guò)注解實(shí)現(xiàn)自動(dòng)裝配的步驟如下:

  • 引入依賴(lài):spring-aop-5.3.13.jar
  • 開(kāi)啟組件掃描:使用 context:component-scan 元素開(kāi)啟自動(dòng)掃描功能
  • 使用注解定義Bean:@Component、@Repositort、@Service、@Controller
  • 依賴(lài)注入:@Autowired、@Resource

spring的核心:1. 標(biāo)注bean代表讓spring管理,2. 工廠模式+反射機(jī)制提前初始化到spring容器中。而不是等需要用時(shí)使用者主動(dòng)new。

2.2. Spring MVC

Spring MVC 是 Spring 提供的一個(gè)基于 MVC 設(shè)計(jì)模式的輕量級(jí) Web 開(kāi)發(fā)框架,本質(zhì)上相當(dāng)于 Servlet。

MVC 模式將應(yīng)用程序劃分成模型(Model)、視圖(View)、控制器(Controller)等三層,如下圖所示:

  • Model(模型):一個(gè)模型可以為多個(gè)視圖(View)提供數(shù)據(jù),一套模型(Model)的代碼只需寫(xiě)一次就可以被多個(gè)視圖重用,有效地減少了代碼的重復(fù)性,增加了代碼的可復(fù)用性。
    可以理解為 service和dao部分代碼
  • View(視圖):指在應(yīng)用程序中專(zhuān)門(mén)用來(lái)與瀏覽器進(jìn)行交互,展示數(shù)據(jù)的資源。在 Web 應(yīng)用中,View 就是我們常說(shuō)的前臺(tái)頁(yè)面,通常由 HTML、JSP、CSS、JavaScript 等組成。
    可以理解為前端展示界面
  • Controller(控制器):通常指的是,應(yīng)用程序的 Servlet。它負(fù)責(zé)將用戶(hù)的請(qǐng)求交給模型(Model)層進(jìn)行處理,并將 Model 層處理完成的數(shù)據(jù),返回給視圖(View)渲染并展示給用戶(hù)。
    可以理解為controller部分代碼

EJB和Spring,spring系列,spring

和 MVC 模式類(lèi)似,三層架構(gòu)同樣將系統(tǒng)劃分成了 3 層:

  • 表示層(UI):用來(lái)實(shí)現(xiàn)與用戶(hù)的交互,接收用戶(hù)請(qǐng)求,并將請(qǐng)求交給業(yè)務(wù)邏輯層(BLL)和數(shù)據(jù)訪(fǎng)問(wèn)層(DAL)進(jìn)行處理,最后將處理結(jié)果返回給用戶(hù)。

  • 業(yè)務(wù)邏輯層(BLL):起到承上啟下的作用,接收表示層傳遞來(lái)的請(qǐng)求,并針對(duì)業(yè)務(wù)對(duì)數(shù)據(jù)進(jìn)行處理,以實(shí)現(xiàn)業(yè)務(wù)目標(biāo)。

  • 數(shù)據(jù)訪(fǎng)問(wèn)層(DAL):用于實(shí)現(xiàn)與數(shù)據(jù)庫(kù)的交互和訪(fǎng)問(wèn),例如從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)、保存或修改數(shù)據(jù)庫(kù)中的數(shù)據(jù)等。
    EJB和Spring,spring系列,spring

  • 依賴(lài)注入復(fù)雜,需要自己手動(dòng)把需要的jar一個(gè)個(gè)添加到pom文件

  • 配置復(fù)雜,applicationContext.xml文件用來(lái)管理springbean及DispatcherServlet(視圖解析器)

  • 安全校驗(yàn)等各種都是通過(guò)xml文件進(jìn)行配置

Spring MVC 主要的執(zhí)行流程:

  • 瀏覽器發(fā)送一個(gè)請(qǐng)求,若請(qǐng)求地址與 web.xml 中配置的前端控制器(DispatcherServlet)的 url-pattern 相匹配,則該請(qǐng)求就會(huì)被前端控制器 DispatcherServlet 攔截;
  • 前端控制器(DispatcherServlet )會(huì)讀取 SpringMVC 的核心配置文件,通過(guò)組件掃描獲取到所有的控制器(Contorller);
  • 將請(qǐng)求信息和控制器中所有控制器方法標(biāo)識(shí)的 @RequestMapping 注解的 value、method 等屬性值進(jìn)行匹配。若匹配成功,則將請(qǐng)求交給對(duì)應(yīng)的 @RequestMapping 注解所標(biāo)識(shí)的控制器方法處理;
  • 處理請(qǐng)求的方法會(huì)返回一個(gè)字符串類(lèi)型的視圖名稱(chēng),該視圖名稱(chēng)會(huì)被 Spring MVC 配置文件中配置的視圖解析器(ViewResolver)解析真正的視圖(View)對(duì)象,最終展示給客戶(hù)端。

2.3. Spring Boot

Spring MVC是基于 Servlet 的一個(gè) MVC 框架 主要解決 WEB 開(kāi)發(fā)的問(wèn)題,因?yàn)?Spring 的配置非常復(fù)雜,各種XML、 JavaConfig、hin處理起來(lái)比較繁瑣。于是為了簡(jiǎn)化開(kāi)發(fā)者的使用,從而創(chuàng)造性地推出了Spring boot,約定優(yōu)于配置,簡(jiǎn)化了spring的配置流程。
說(shuō)得更簡(jiǎn)便一些:Spring 最初利用“工廠模式”(DI)和“代理模式”(AOP)解耦應(yīng)用組件。大家覺(jué)得挺好用,于是按照這種模式搞了一個(gè) MVC框架(一些用Spring 解耦的組件),用開(kāi)發(fā) web 應(yīng)用( SpringMVC )。然后有發(fā)現(xiàn)每次開(kāi)發(fā)都寫(xiě)很多樣板代碼,為了簡(jiǎn)化工作流程,于是開(kāi)發(fā)出了一些“懶人整合包”(starter),這套就是 Spring Boot。

SpringBoot的簡(jiǎn)便提現(xiàn)在哪里?

  • 自動(dòng)配置:約定大于配置,可以簡(jiǎn)化spring的配置流程,注意不是注入而是配置
  • 簡(jiǎn)化啟動(dòng):以前web應(yīng)用要使用到tomat服務(wù)器啟動(dòng),而springboot內(nèi)置服務(wù)器容器,通過(guò)@SpringBootApplication中注解類(lèi)中main函數(shù)啟動(dòng)即可

所以整個(gè)springboot的執(zhí)行依賴(lài)于其啟動(dòng)類(lèi)及啟動(dòng)類(lèi)上的注解
EJB和Spring,spring系列,spring

EJB和Spring,spring系列,spring

自動(dòng)配置的原理依賴(lài)注解@SpringBootApplication-@EnableAutoConfiguration- @Import({AutoConfigurationImportSelector.class})-selectImports方法-spring.factories。

SpringBoot的自動(dòng)裝配也就是通過(guò)@EnableAutoConfiguration注解,加載AutoConfigurationImportSelector類(lèi)中的selectImports方法,進(jìn)而掃描spring.factories文件下的自動(dòng)配置類(lèi),并將其裝配到IOC容器的過(guò)程。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-860681.html

到了這里,關(guān)于EJB和Spring的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Spring系列五:手動(dòng)實(shí)現(xiàn)Spring底層機(jī)制

    Spring系列五:手動(dòng)實(shí)現(xiàn)Spring底層機(jī)制

    上文中, 我們學(xué)習(xí)到了 Spring系列四:AOP切面編程 接下來(lái)我們學(xué)習(xí), 手動(dòng)實(shí)現(xiàn)Spring底層機(jī)制 ● java的類(lèi)加載器 3 種 Bootstrap類(lèi)加載器---------------------對(duì)應(yīng)路徑j(luò)relib Ext類(lèi)加載器------------------------------對(duì)應(yīng)路徑j(luò)relibext App類(lèi)加載器-----------------------------對(duì)應(yīng)路徑classpath ●classpath 類(lèi)路

    2024年02月12日
    瀏覽(14)
  • 【spring源碼系列-01】spring底層源碼整體概述

    【spring源碼系列-01】spring底層源碼整體概述

    Spring源碼系列整體欄目 內(nèi)容 鏈接地址 【一】spring源碼整體概述 https://blog.csdn.net/zhenghuishengq/article/details/130940885 【二】通過(guò)refresh方法剖析IOC的整體流程 https://blog.csdn.net/zhenghuishengq/article/details/131003428 【三】xml配置文件啟動(dòng)spring時(shí)refresh的前置工作 https://blog.csdn.net/zhenghuishen

    2024年02月07日
    瀏覽(33)
  • 【Spring框架全系列】第一個(gè)Spring程序

    【Spring框架全系列】第一個(gè)Spring程序

    ??哈嘍,大家好,我是小浪。那么從今天開(kāi)始,我就要開(kāi)始更新spring框架全系列的博客了;本專(zhuān)欄免費(fèi)閱讀,最好能夠點(diǎn)個(gè)訂閱,以便于后續(xù)及時(shí)收到更新信息哈!?? ??目錄 一、為什么要學(xué)習(xí)框架? 二、什么是Spring? 三、Spring的創(chuàng)建和使用 一、新建一個(gè)maven項(xiàng)目 二、添

    2024年02月02日
    瀏覽(26)
  • Spring系列學(xué)習(xí)九、Spring MVC的使用

    Spring系列學(xué)習(xí)九、Spring MVC的使用

    本章我們將與大家一起探討Spring框架中的Web模塊中的一顆璀璨明珠——Spring MVC。在這個(gè)章節(jié)中,我們將對(duì)MVC設(shè)計(jì)模式、Spring MVC的工作原理、HandlerMapping和ViewResolver的作用,以及如何處理表單、文件上傳和異常處理等內(nèi)容有基本的了解。別擔(dān)心,我將以通俗易懂、幽默風(fēng)趣的方

    2024年02月01日
    瀏覽(21)
  • 【Spring Boot系列】- Spring Boot事務(wù)應(yīng)用詳解

    事務(wù)(Transaction)是數(shù)據(jù)庫(kù)操作最基本單元,邏輯上一組操作,要么都成功。如果有一個(gè)操作失敗。則事務(wù)操作都失?。ɑ貪L(Rollback))。 事務(wù)的四個(gè)特性(ACID): 1. 原子性(Atomicity) 一個(gè)事務(wù)(Transaction)中的所有操作,要么全部完成,要么全部不完成,不會(huì)結(jié)束在中間

    2024年02月08日
    瀏覽(25)
  • 【Spring Boot系列】- Spring Boot攔截器

    攔截器(Interceptor)是在面向切面編程中應(yīng)用的,就是在service或者一個(gè)方法前調(diào)用一個(gè)方法,或者在方法后調(diào)用一個(gè)方法。是基于JAVA的反射機(jī)制??梢愿鶕?jù) URL 對(duì)請(qǐng)求進(jìn)行攔截,主要應(yīng)用于登陸校驗(yàn)、權(quán)限驗(yàn)證、亂碼解決、性能監(jiān)控和異常處理等功能。 在 Spring Boot 項(xiàng)目中,

    2024年02月13日
    瀏覽(16)
  • 【Spring進(jìn)階系列丨第一篇】初識(shí)Spring開(kāi)發(fā)

    【Spring進(jìn)階系列丨第一篇】初識(shí)Spring開(kāi)發(fā)

    小伙伴們大家好,我是陳橘又青,今天起 《Spring進(jìn)階系列》 開(kāi)始更新。本專(zhuān)欄將涵蓋Spring框架的核心概念、配置管理、Web開(kāi)發(fā)、AOP、Boot、Security、Data、Integration和Batch等多個(gè)主題。通過(guò)理論講解和實(shí)際案例的剖析,幫助讀者深入理解Spring框架的原理和應(yīng)用技巧,提升開(kāi)發(fā)人員

    2024年02月05日
    瀏覽(18)
  • spring data系列之Spring data ElasticSearch

    spring data系列之Spring data ElasticSearch

    Spring data ElasticSearch簡(jiǎn)介: ?????? Elasticsearch是一個(gè)實(shí)時(shí)的分布式搜索和分析引擎。它底層封裝了Lucene框架,可以提供分布式多用戶(hù)的全文搜索服務(wù)。 ?????? Spring Data ElasticSearch是SpringData技術(shù)對(duì)ElasticSearch原生API封裝之后的產(chǎn)物,它通過(guò)對(duì)原生API的封裝,使得程序員可以簡(jiǎn)單的

    2023年04月08日
    瀏覽(33)
  • 【Spring框架全系列】初識(shí)Spring MVC(上)

    【Spring框架全系列】初識(shí)Spring MVC(上)

    ??哈嘍,大家好,我是小浪。接著上篇博客,我們學(xué)習(xí)了springboot配置日志文件,到此,那么springboot的內(nèi)容也更新的差不多了,由于是初學(xué)階段,所以不學(xué)習(xí)那么深入,那么我們學(xué)習(xí)框架都知道SSM,當(dāng)前我們已經(jīng)學(xué)習(xí)完畢springboot了,那么今天就來(lái)學(xué)習(xí)第二個(gè)S,Spring MVC;????

    2024年02月07日
    瀏覽(22)
  • 【Spring Boot系列】- Spring Boot偵聽(tīng)器Listener

    【Spring Boot系列】- Spring Boot偵聽(tīng)器Listener

    什么事Web監(jiān)聽(tīng)器?web監(jiān)聽(tīng)器就是 Servlet中特殊的類(lèi) ,他們能幫助開(kāi)發(fā)者監(jiān)聽(tīng)web中的特定事件,比如ServletContext、HttpSession、ServletRequest的創(chuàng)建和銷(xiāo)毀;變量的創(chuàng)建、銷(xiāo)毀和修改等??梢栽谀承﹦?dòng)作前后增加處理,實(shí)現(xiàn)監(jiān)控等等。web監(jiān)聽(tīng)器的使用場(chǎng)景有很多;Spring的監(jiān)聽(tīng)器是一種

    2024年02月07日
    瀏覽(21)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包