日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

简述基于JavaEE企业级开发技术(Spring)(1)

發布時間:2024/3/13 java 61 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简述基于JavaEE企业级开发技术(Spring)(1) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、緒論

1、學習內容

  • javaEE企業開發技術概述
  • javaEE容器——Spring
  • ORM數據層——MyBatis/JPA
  • Web層——Spring MVC
  • 展現層——JSP/Thymeleaf
  • 整合框架——SSM/SSH
  • 用戶模塊分析
  • 用戶模塊+功能模塊設計

前端框架:Bootstrap,NodeJS,Vue/React/Angular

2、WEB端開發發展歷程(java)

  • CGI——每次請求產生一個進程,重量級。
  • Servlet——每次請求產生一個線程,輕量級。

控制邏輯、頁面表現、業務邏輯全部混在一起,前端設計無法介入

  • JSP——編譯成Servlet,在HTML中嵌入java代碼。前端開發人員可以進行較獨立的設計和修改
  • Model1——JSP+Bean
    業務java代碼封裝到bean中
    通過<jsp:useBean >標簽獲取/創建javabean
    JSP負責頁面表現和控制邏輯
    Javabean負責業務邏輯
  • Model2——Web MVC
    M——Model,模型(業務模型),即Web應用中的數據及對數據的處理,頁面要顯示的數據,頁面要提交的數據,實體數據。還包括對數據的管理和維護。可進一步分層
    V——View,視圖,即web頁面,對模型的展現
    C——Controller,控制邏輯,接收用戶請求轉發給相應的模型進行處理,把模型處理結果返回給對應的視圖進行展現。

3、JavaEE應用的特點

JavaEE是一套使用Java進行企業級Web應用開發的大家一致遵循的工業標準。

4、開發平臺與工具包

  • IntelliJ IDEA(Ultimate 教育版)
  • Apache Tomcat8
  • Mysql5.7
  • Spring5
  • MyBatis3.5
  • JPA/Hibernate5

5、基于maven的java項目開發管理

  • JDK8——Java運行環境
  • IDEA (Eclipse EE)——集成開發環境
  • Maven3——Java項目構建工具
  • GIT/gitee——源代碼管理工具
  • Jenkins——持續集成工具(CI)

6、Maven開發配置(IDEA)

  • (1)下載apache-maven,解壓后放D:\software\maven
  • (2)本地maven倉庫:新建目錄D:\software\maven\repo
  • (3)Maven配置:修改D:\software\maven\conf\settings.xml
    修改maven配置中的localRepository和mirror,如下:(不要放在xml的注釋中!)
<localRepository>D:\software\maven\repo</localRepository> <mirror><id>ali</id><mirrorOf>*</mirrorOf><name>ali maven repo</name><url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror>

以上是windows,若為mac:

<localRepository>/usr/local/repo</localRepository> <mirror><id>ali</id><mirrorOf>*</mirrorOf><name>ali maven repo</name><url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror> <mirror><id>maven-default-http-blocker</id><mirrorOf>external:http:*</mirrorOf><name>Pseudo repository to mirror external repositories initially using HTTP.</name><url>http://0.0.0.0/</url><blocked>true</blocked> </mirror>
  • (4)配置IDEA的maven設置:點擊File->Settings菜單,搜maven
  • (5)在IDEA中創建maven項目:File->New->project,選擇maven
  • (6)項目信息完善,maven選擇



  • (7)功能開發
    添加依賴:在pom中添加dependency元素即可,輸入artifactId自動聯想完成添加

二、Spring概述

1、Spring簡介

Spring是什么:

  • 一個復雜而又簡潔的javabean工廠
  • Spring是一種輕量級的、非侵入式的Java/JavaEE應用框架
  • 管理bean的創建和管理bean 的依賴

Spring優點:

  • Spring的DI容器,提高組件之間的解耦
  • SpringAOP提供通用任務的集中統一處理(安全、事務、日志等),實現更好的代碼復用

2、IOC與DI

容器來管理對象之間的依賴關系(而不是對象本身來管理),就叫“控制反轉”或“依賴注入

Bean容器框架的基本思想就是IOC/DI

IOC(Inversion of Control):由容器來負責控制對象的生命周期和對象間的關系(一種減少類與類之間依賴的設計原則)
DI(Dependency Injection):在系統運行中,由容器動態的向某個對象提供它所需要的其他對象

Spring就是一個IOC容器

IOC與DI,說的是一回事,但DI這個名詞更能表達這種設計模式的思想

3、DI的兩種方式

(1)設值注入
IOC容器使用屬性的setter方法來注入被依賴的實例
<property name=“userDao” ref=“userDao”/>
(2)構造注入
IOC容器使用構造器來注入被依賴的實例
<constructor-arg ref=“db”/>
用index屬性指定順序,從0開始

4、兩種注入方式對比

(1)設值注入的優點:

  • 對于復雜依賴關系,如采用構造注入,導致構造器過于臃腫,spring在創建bean對象的同時,要同時實例化其依賴的其他所有實例對象,導致性能下降
  • 對于某些屬性可選的情況,多參數構造器更加復雜。

(2)構造注入的優點

  • 如果依賴對注入順序有要求,則可以在構造器中決定依賴關系的注入順序
  • 對依賴關系無須變化的bean
  • 使用構造注入,組件內部的依賴關系對于組件調用者完全透明,更符合高內聚原則。

設值注入為主,構造注入為輔

三、Spring配置管理

1、XML

標記語言
(1)Html(非嚴格,容錯)
(2)Xml(可擴展標記語言,嚴格定義,格式良好的)

2、Spring容器

org.springframework.beans.factory.BeanFactory是Spring IoC容器的實際代表者,IoC容器負責容納bean,并對bean進行管理

使用XML作為配置元數據的描述格式,對那些我們希望通過Spring IoC容器管理的bean進行定義。

ApplicationContext是BeanFactory的擴展,功能得到了進一步增強,比如更易與Spring AOP集成、消息資源處理(國際化處理)、事件傳遞及各種不同應用層的context實現(如針對web應用的WebApplicationContext)。

ApplicationContext可利用 ContextLoader在 Web應用啟動的時候 自動創建 (SSH整合的時候 就是采用這種方式 )
創建 ApplicationContext容器時 ,所有 singleton bean將會被 預初始化 。

3、Spring包依賴

4、Spring中bean的定義


(1)在beans下添加子元素bean
(2)設置id屬性:bean對象在容器中的唯一標識,通過這個id的值可以獲取到容器中對應的bean對象
(3)設置class屬性:創建bean對象的類

5、配置依賴

各組件的相互引用實質上就是依賴關系,可以通過Spring的IOC容器完成依賴注入。

(1)設值注入
在需要配置依賴的組件對應的<bean>元素中配置<property>子元素,指定要注入的屬性的名字和值

(2)構造注入
在需要配置依賴的組件對應的<bean>元素中配置<constructor-arg>子元素,按構造函數參數順序指定對應要注入值

依賴關系的值可以是一個確定的常量,也可以是容器中其他bean的引用
通常對于普通屬性的值不納入配置管理,主要是配置bean實例之間的依賴關系

一般依賴配置分四種情況
(1)注入普通屬性
(2)注入bean引用
(3)注入嵌套bean
(4)注入集合類型值

(1)注入普通屬性



(2)注入bean引用(依賴)


(3)使用自動裝配注入bean引用

設定bean元素的autowire屬性

  • no:(默認值)不使用 自動裝配,須顯示指定ref
  • byName:根據名字自動裝配,在容器中找到id屬性與需要注入的屬性(setter方法的名字)同名的bean完成注入
  • byType:根據類型匹配自動裝配
  • constructor:與byType類似
  • autodetect:根據bean內部結構決定用constuctor還是byType


(4)注入嵌套bean
在bean的property子元素中嵌套一個無id的bean元素
嵌套的bean將不被spring訪問。

<bean id="chinese" class="app.service.impl.Chinese"> <!-- 將stoneAxe注入給axe屬性 --> <property name="axe"><bean class="app.service.impl.StoneAxe"/> </property> </bean>

(5)注入集合值
在property元素中使用<list><set><map><props>子元素分別這是List、Set、Map、Properties集合屬性值



6、創建Bean實例

<bean id="chinese" class="app.service.impl.Chinese"><property name="axe" ref="steelAxe"/> </bean> <bean id="steelAxe“ class="app.service.impl.SteelAxe"/> ApplicationContext ctx = newClassPathXmlApplicationContext("bean.xml"); Person p = (Person)ctx.getBean("chinese"); //Person p = ctx.getBean("chinese" , Person.class); p.useAxe();

7、容器中Bean的作用域-scope

  • singleton: 單例模式 ,在整個容器中只有一個實例
  • prototype:原型模式 ,每次通過getBean獲取時產生一個新的實例
  • request:每次http請求產生一個新的實例(如action),web應用。須在web.xml中配置相應的Listener或filter
  • Session:每次 http session產生一個新的實例 ,web應用
  • 默認為singleton

8、容器中bean的生命周期


生命周期:1.創建;2.使用;3.銷毀

prototype bean:每次請求產生一個新的實例,spring無法跟蹤其生命周期
singleton bean:單例對象,每次客戶請求都返回同一個共享實例,spring可以跟蹤其創建和銷毀,實現對其生命周期的管理

生命周期的管理時機:1.注入之后——init-method;2.銷毀之前——destroy-method

(1)依賴注入之后
必要資源的申請
在< bean>的配置中加入init-method屬性指定bean的全部屬性注入/設值成功后要執行的方法

<bean id="chinese" class="app.service.impl.Chinese" init-method="init"><property name="axe" ref="steelAxe"/> </bean>

(2)Bean銷毀之前
占用資源的回收
在< bean>的配置中加入destroy-method屬性指定bean在銷毀之前要執行的方法

<bean id="chinese" class="app.service.impl.Chinese" destroy-method=“destroy"><property name="axe" ref="steelAxe"/> </bean>

(3)協調作用域不同步的bean
√ Singleton bean依賴Singleton bean
√ Prototype bean依賴Prototype bean
√ Prototype bean依賴Singleton bean
X Singleton bean依賴Prototype bean

不同步的根源: Singleton bean只被初始化一次,多次請求獲取同一個共享對象; Prototype bean每次請求都應重新創建。

解決方案
放棄容器注入,singleton bean每次使用prototype bean時主動從服務器請求新的prototype bean。耦合了SpringAPI
利用方法注入:使用lookup方法注入

public abstract Axe getAxe(); public void useAxe() {System.out.println("正在使用 " + getAxe()+ "砍柴!");System.out.println(getAxe().chop()); } <bean id="steelAxe" class="app.service.impl.SteelAxe" scope="prototype"/> <bean id="chinese" class="app.service.impl.Chinese"><!-- 指定getAxe方法返回steelAxe--><lookup-method name="getAxe" bean="steelAxe"/> </bean>

9、JavaEE中的設計模式

  • 工廠模式
  • 單例模式
  • 代理模式(用戶代碼不直接調用目標對象的方法,通過代理對象調用)
  • 靜態代理:定義實現代理類
  • 動態代理:動態生成代理類
    JDK反射與動態代理
    CGLib動態代理

10、靜態代理(編碼實現代理對象)




11、JDK反射

通過類的簽名創建對象
通過方法的簽名調用方法

12、基于JDK的動態代理




13、基于cglib的動態代理




14、基于注解@簡化Springxml配置

目的:消滅Bean的xml配置(大幅減少)
做法:代碼標記,自動掃描

  • 在Bean的定義文件中添加注解@
  • 容器啟動時自動掃描 context:component-scan



15、基于注解自動掃描的配置

(1)context:component-scan
beans中引入context命名空間/XSD
配置< context:component-scan base-package=“….”/>

(2)Bean的配置:在類定義語句前注解
@Component (“beanName”):將注解類的對象加入容器,id為beanName。beanName缺省時為類名(首字母小寫)

  • @Bean
  • @Service
  • @Repository

@Scope(“scope”):指定對象在容器中的作用域,無該注解時默認為singleton

(3)依賴的配置

  • @Autowired:Spring的注解,在屬性定于語句或setter方法前注解,將容器中匹配的對象自動注入,默認是byType方式。如果需要采用byName方式,可以通過添加@Qulifier(“name”)的方式指定
  • @Resource:JSR-250標準注解,與@Autowried類似,默認是byName方式。如果要采用byType方式可以添加type參數,如@Resource(type=com.test.ExampleBean)

(4)值的注入(結合properties文件配置):
resource目錄下創建values.properties文件,填寫key-value
在spring配置文件中:<context:property-placeholder location="classpath:values.properties" file-encoding="UTF-8" ignore-unresolvable="true"/>
@Value(“value”):在屬性定義語句前注解,給對應屬性注入常量值
@Value(“${propKey:defaultValue}”):給屬性注入屬性文件文件中propKey對應的值,如果propKey不存在,就注入defaultValue

(5)生命周期
@PostConstruct:在類的成員方法定義語句前注解,注解的方法將會在對象完成構造且依賴注入完成后被自動調用?對象初始化的鉤子函數
@PreDestroy:在類的成員定于語句前注解,注解的方法將在bean對象銷毀之前被自動調用?對象銷毀的鉤子函數

16、Java日志配置

擁抱log4j,拋棄System.out.println

(1)在resources目錄下新建log4j.properties
(2)在pom.xml中添加依賴包
(3)為類添加logger靜態屬性

(4)在方法中用logger輸出日志

  • logger.debug
  • logger.info
  • logger.warn
  • logger.error
  • logger.fetal
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.25</version> </dependency> <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.25</version> </dependency> <dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version> </dependency>

log4j.properties:

17、Spring測試

JUnit:Java語言的單元測試框架
默認添加到生成的模板項目中:版本改到4.12以上

在任意方法前加@Test注解都可測試。實際應用中測試用例與項目代碼完全分離,一般scope限定為test
在test/java下的包中添加測試類,在測試方法前添加@Test注解

18、Spring測試(測試容器中的bean)

在pom中添加sprint-test依賴

測試類前添加注解@RunWith和@ContextConfiguration
可以通過@Resource給測試類注入容器中的bean

如果采用注解開發的方式:

總結

以上是生活随笔為你收集整理的简述基于JavaEE企业级开发技术(Spring)(1)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。