一篇文章帶你Java Spring開(kāi)發(fā)入門(mén)
Spring概述
Spring就是為解決企業(yè)應(yīng)用開(kāi)發(fā)的復(fù)雜性而創(chuàng)建的,做為開(kāi)源中間件,它使用基本的JavaBean來(lái)完成以前只可能有EJB(Java企業(yè)bean)完成的事情。Spring獨(dú)立于各種應(yīng)用服務(wù)器,甚至無(wú)須應(yīng)用服務(wù)器的支持也能提供應(yīng)用服務(wù)器的功能,同時(shí)為JavaEE應(yīng)用程序開(kāi)發(fā)提供繼承的框架,是企業(yè)應(yīng)用開(kāi)發(fā)的“一站式”選擇。Spring的用途不僅限于服務(wù)器的開(kāi)發(fā),任何Java應(yīng)用都可以從Spring中受益。
Spring是一個(gè)開(kāi)源框架,它的功能都是從實(shí)際開(kāi)發(fā)中抽取出來(lái)的。其主要優(yōu)勢(shì)之一是采用分層架構(gòu),整個(gè)框架由7個(gè)定義良好的模塊(組件)構(gòu)成,它們都統(tǒng)一構(gòu)建于核心容器之上。
Spring Core:核心容器提供Spring框架的基本功能,其主要組件BeanFactory是工廠(chǎng)模式的實(shí)現(xiàn)。它通過(guò)控制反轉(zhuǎn)(IOC)機(jī)制,將應(yīng)用程序配置和依賴(lài)性規(guī)范與實(shí)際的程序代碼分離開(kāi)。
Spring Context:想Spring框架提供上下文信息,包括企業(yè)服務(wù)。
Spring DAO:JDBC DAO抽象層提供了有用的一場(chǎng)層次結(jié)構(gòu),用來(lái)管理異常處理和不同數(shù)據(jù)庫(kù)供應(yīng)商拋出的錯(cuò)誤信息。
Spring簡(jiǎn)單應(yīng)用
當(dāng)創(chuàng)建一個(gè)簡(jiǎn)單的Java項(xiàng)目的時(shí)候,在控制臺(tái)要求輸出“Hello world!”,如果要求輸出“Hello Beer!”等等,那么就要不斷地去修改程序源代碼。如果項(xiàng)目龐大,程序中涉及這一輸出地語(yǔ)句不止一處,有很多處,且分散在整個(gè)項(xiàng)目地源碼(往往有成千上萬(wàn))中,如此大動(dòng)干戈地改動(dòng)程序,對(duì)于一個(gè)軟件系統(tǒng)地維護(hù)來(lái)說(shuō)將是災(zāi)難性地。
package org.example; public class TestHello { private String message; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }
package org.example; public class Test { public static void main( String[] args ) { TestHello testHello=new TestHello(); testHello.setMessage("Hello world!……"); System.out.println(testHello.getMessage()); } }
下面使用Spring解決這一問(wèn)題。使用Spring實(shí)現(xiàn)程序輸出內(nèi)容地靈活改變。
Spring框架地基本使用
項(xiàng)目創(chuàng)建
添加依賴(lài)包
將下面這段依賴(lài)加入到紅色方框里面<dependencies> </dependencies>之間。
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.3.8</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>5.3.8</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.8</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>5.2.12.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>5.3.8</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency>
加入完成之后,點(diǎn)擊該按鈕,稍等一會(huì)ideal自動(dòng)幫我們下載依賴(lài)包。
創(chuàng)建Spring配置文件
修改配置文件
打開(kāi)ApplicationContest.xml,對(duì)其進(jìn)行修改:
id:bean的唯一標(biāo)識(shí)符,也就是相當(dāng)于我們學(xué)的對(duì)象名。
class:bean對(duì)象所對(duì)應(yīng)的全限定名:包名+類(lèi)型。
property:相當(dāng)于給對(duì)象中的屬性設(shè)置一個(gè)值。
value:具體的值,基本數(shù)據(jù)類(lèi)型。
<?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 http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="TestHello" class="org.example.TestHello"> <property name="message"> <value>Hello World!</value> </property> </bean> </beans>
修改測(cè)試類(lèi)
package org.example; import javafx.application.Application; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class App { public static void main( String[] args ) { //獲取ApplicationContext對(duì)象 ApplicationContext application=new ClassPathXmlApplicationContext("ApplicationContext.xml"); //通過(guò)ApplicationContext獲得TestHello對(duì)象 //getBean()方法中的參數(shù)即為配置文件中Bean的id的值 TestHello testHello=(TestHello) application.getBean("TestHello"); System.out.println(testHello.getMessage()); } }
運(yùn)行結(jié)果
若要程序輸出“hello Beer!”,則只需要修改配置文件中的value值即可
<value>Hello Beer!</value>
這個(gè)例子看不出來(lái)Spring的優(yōu)勢(shì),擔(dān)當(dāng)項(xiàng)目規(guī)模很大,且源代碼中有很多處這樣的輸出語(yǔ)句時(shí),Spring的有事就充分體現(xiàn)出來(lái)了。因?yàn)橛昧薙pring只需修改配置文件一個(gè)地方的value值即可讓所有的輸出都跟著一致變化,而不用逐條煩瑣地修改程序代碼啦!
總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
Java中的SynchronousQueue隊(duì)列詳解
這篇文章主要介紹了Java中的SynchronousQueue隊(duì)列詳解,SynchronousQueue是BlockingQueue的一種,所以SynchronousQueue是線(xiàn)程安全的,SynchronousQueue和其他的BlockingQueue不同的是SynchronousQueue的capacity是0,需要的朋友可以參考下2023-12-12Spring?Boot?+?EasyExcel?+?SqlServer?進(jìn)行批量處理數(shù)據(jù)的高效方法
在日常開(kāi)發(fā)和工作中,我們可能要根據(jù)用戶(hù)上傳的文件做一系列的處理,本篇文章就以Excel表格文件為例,主要介紹了Spring?Boot?+?EasyExcel?+?SqlServer?進(jìn)行批量處理數(shù)據(jù)的高效方法,需要的朋友可以參考下2024-06-06SpringBoot項(xiàng)目中建議關(guān)閉Open-EntityManager-in-view原因
這篇文章主要為大家解析了在Spring Boot項(xiàng)目中建議關(guān)閉Open-EntityManager-in-view的原因示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-02-02Java字節(jié)流與基本數(shù)據(jù)類(lèi)型的轉(zhuǎn)換實(shí)例
本篇文章主要介紹了Java字節(jié)流與基本數(shù)據(jù)類(lèi)型的轉(zhuǎn)換實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06Java 基礎(chǔ)全面講解StringBuffer類(lèi)的使用
當(dāng)對(duì)字符串進(jìn)行修改的時(shí)候,需要使用 StringBuffer 和 StringBuilder類(lèi),和String類(lèi)不同的是,StringBuffer和 StringBuilder類(lèi)的對(duì)象能夠被多次的修改,并且不產(chǎn)生新的未使用對(duì)象2022-01-01SpringBoot整合Redis實(shí)現(xiàn)訪(fǎng)問(wèn)量統(tǒng)計(jì)的示例代碼
本文主要介紹了SpringBoot整合Redis實(shí)現(xiàn)訪(fǎng)問(wèn)量統(tǒng)計(jì)的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02學(xué)會(huì)CompletableFuture輕松駕馭異步編程
這篇文章主要為大家介紹了CompletableFuture輕松駕馭異步編程教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04基于springboot實(shí)現(xiàn)整合shiro實(shí)現(xiàn)登錄認(rèn)證以及授權(quán)過(guò)程解析
這篇文章主要介紹了基于springboot實(shí)現(xiàn)整合shiro實(shí)現(xiàn)登錄認(rèn)證以及授權(quán)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12