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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

spring的基本配置和使用

發布時間:2023/12/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring的基本配置和使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這里不講spring整合別的框架 先單純使用spring

Spring是一個輕量級控制反轉(IoC)和面向切面(AOP)的容器框架

IoC:Inversion of Control 控制反轉,也就是將實例化對象的控制權交由spring容器 ,實現了解耦

接口和實現類之間需要通過spring容器來建立聯系 如果需要增加新的功能 原有的實現類不能滿足要求,根據開閉原則 不修改原有的類 可以拓展新的類

如果不使用spring容器,那么所有接口的引用指向實現類的對象實例的代碼,要手動全部更改成指向新的實現類的對象實例 這會非常麻煩 也 違反了開閉原則

也就是 原本是? UserDao dao=new UserDaoImpl();? 要改成? ?UserDao? dao=new UserDaoImpl2();

如果使用了spring容器管理 只要修改spring容器中 這個接口對應的實現類就可以了 不需要更改全部的代碼? 大大降低了 耦合度 提高了拓展性

DI:Dependency Injection 依賴注入?

既然對象的實例化全部交由spring容器管理 我們不能直接new了,那么怎么得到我們想要得對象實例呢

這就是通過spring的依賴注入, spring可以通過xml或者注解實現依賴注入,在Ioc的基礎上 交給spring管理的類 ,spring會創建這個類的實例對象 并且是默認是單例的

也就是你多個類中依賴注入的對象 都是同一個對象? 可以手動設置為多例 每次注入都創建一個新的對象

AOP:面向切面編程

在實際業務中 經常會有一些每個業務都需要執行的相同代碼,比如權限判斷,或者想對所有方法進行增強 加入事務管理 或者 日志記錄

我們可以將這些重復的相同代碼 或者要新增的功能 定義一個切面類 然后配置要進行攔截哪些類的哪些方法,也就是在執行目標方法之前會先執行切面類中的方法?

然后執行目標方法,或者執行完目標方法之后再執行切面類中的方法 都可以設置

其實AOP就是動態代理模式的實現 如果要攔截的類 繼承了接口 會使用JDK動態代理否則使用Cglib代理 來創建目標類的代理對象

然后根據我們在切面中配置的方法 在執行目標方法之前或之后調用我們配置的方法? 從而實現了不修改原有的類 進行了拓展和增強

---------------------------------------------------------------------------

基本概念講完了 接下來開始配置??

首先在src根目錄下 建一個名字隨意 默認applicationContext.xml的配置文件 我一般改成spring.xml

這就是一個空的配置文件?

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd"></beans>

首先使用XML方式實現控制反轉和依賴注入

<bean name="名字唯一"? class="類的完整路徑"?>

<property name="類中屬性名" ref="引用別的bean標簽的name或者id屬性的值"? value="如果這個屬性是普通屬性 如string或者Integer 直接賦值就行" />

<!-- 給類中屬性注入值? 也就是依賴注入 -->

</bean>

這樣子就完成了一個類交給spring容器管理 ,?<property>標簽 注入屬性不是必須的

如果使用了這個注入 類中的屬性 必須提供set方法 才能注入

這是bean標簽的其他屬性:

scope="singleton或者prototype"? ? ? ?singleton默認的單例模式,prototype多例 每次都會創建一個新的實例

lazy-init="true"? ? ? ??spring容器默認初始化會實例化所有管理的類對象

init-method="類中自定義方法名"? ? ?初始化時調用的方法

destroy-method="類中自定義方法名"? ?對象銷毀時調用的方法 在容器關閉時會銷毀 如果有多個實例對象 將不會銷毀

接下來用注解方式? 實現控制反轉,將類交給spring容器管理和依賴注入?

首先在配置文件中加上?

<context:component-scan base-package="包名,包名"/>?

這將掃描指定包下的所有類和子包的類? 如果有注解的 也將被spring管理

然后在類上 加上這幾個注解的其中一個

@Repository("名字 相當于bean標簽的name"):使用持久化類,dao類
@Service("名字 相當于bean標簽的name"):業務層類,service類
@Controller("名字 相當于bean標簽的name"):控制層,springMvc中的控制器
@Component("名字 相當于bean標簽的name"):組件,其他類

這四個注解功能一樣 只不過有語義區別?

依賴注入 只需要在對應的屬性上 加上@Autowired 會根據屬性名在spring容器中找對應名字的類 然后注入對象

如果根據名字沒有找到 會根據類型找相匹配的類 然后注入對象

如果想指定注入的類,的對象? 可以加一個@Qualifier("名字") 會優先注入這個名字的類的對象

這樣也實現了將一個類交給spring管理

其他注解

@Scope:設置作用域
@PostConstruct:在實例化后執行的方法
@PreDestroy:在對象銷毀之前執行的方法

-------------------------------

上面實現了Ioc? 接下來實現AOP

AOP概念:
切面:將公共的,但是與業務無關的代碼抽象出一個單獨的類,則該類為切面。
通知:攔截到切入點時,需要執行的代碼,切面中的每一個方法,則稱為通知.

連接點:所謂連接點是指那些被攔截到的點,也就是要攔截的類中的方法?

切入點:攔截的一系列連接點的集合。

通知:
前置通知:在執行切入點之前執行的方法
后置通知:在執行完切入點之后執行的方法
最終通知:在后置通知之前執行,執行完畢后才執行后置通知
例外通知:切入點方法發生異常時執行
環繞通知:相當于前置和后置的結合

首先講注解的實現方式

首先要在配置文件中 加上?<aop:aspectj-autoproxy/>? 啟用 apo注解支持

定義一個類 作為切面類 加上注解?@Component 交給spring管理 再加上@Aspect 定義為切面類

@Before("切入點方法名()"):聲明一個前置通知
@AfterReturning("切入點方法名()"):聲明一個后置通知
@After("切入點方法名()"):聲明一個最終通知
@AfterThrowing("切入點方法名()"):聲明一個異常通知
@Around("切入點方法名()"):環繞通知 會影響后置通知的返回值和異常通知
@Order:聲明切面的執行順序,值越小,優先級越高 這個加在類上
@Pointcut:聲明一個切入點
一般定義在一個空的方法上 配置指定的篩選規則 然后其他通知方法就可以引用這個切入點
例子:@Pointcut("execution(方法修飾符 方法返回值 方法所屬類 匹配方法名 ( 方法中的形參表 ) 方法申明拋出的異常 )")
每個部分都支持使用*號表示匹配全部,方法所屬類是寫完整類路徑名

通知和切入點都加在對應的方法上就行 這樣在調用原本的對象的方法時會進行攔截 執行切面中配置好的通知的代碼

然后xml方式實現aop

<aop:config>

<aop:pointcut expression="切入點表達式,and args(參數名)這樣是表示輸入參數 " id="唯一即可 通知標簽才能引用" />

<aop:aspect ref="引用已經交給spring管理的切面類的id">

<aop:通知類型? method="切面類中方法名" pointcut-ref="引用已經定義好的切入點" returning="obj,如果這個通知有返回值就寫這個" />

</aop:aspect>

</aop:config>

這就是spring的基本使用和配置? 還算是比較簡單的

?

?

轉載于:https://www.cnblogs.com/java888/p/10778576.html

總結

以上是生活随笔為你收集整理的spring的基本配置和使用的全部內容,希望文章能夠幫你解決所遇到的問題。

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