spring 基本操作總結主要是aop以及依賴註入的基本配置

来源:http://www.cnblogs.com/maybo/archive/2016/02/04/5182541.html
-Advertisement-
Play Games

一所需架包 spring commom-logging.jar spring.jar 註解 common-annotation.jar aop面向切麵 aspectjrt.jar aspectjweaver.jar cglibb-nodep.ja(許可權帶代理proxy) jdbc database


一所需架包

spring 

commom-logging.jar  spring.jar

註解

common-annotation.jar

aop面向切麵

aspectjrt.jar    aspectjweaver.jar  cglibb-nodep.ja(許可權帶代理proxy)

jdbc database

common-pool.1.6.jar common-dbhp.jar mysql-connector-bin-*.*.*.jar

配置文件的模板beans.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:tx="http://www.springframework.org/schema/tx"

       xmlns:context="http://www.springframework.org/schema/context"

       xmlns:aop="http://www.springframework.org/schema/aop"

     xsi:schemaLocation="http://www.springframework.org/schema/beans

       http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd  

       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd

       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">

</beans>

以上模板引入了面向切麵(aop,許可權代理(context)以及資料庫操作(tx)的命名空間

三基本使用

1.創建bean對象

1.1預設通過set

<bean id="persionBean" class="com.my.PersionBean.impl.PersionBean" destroy-method="destory" lazy-init="true" init-method="init"></bean>

1.2通過靜態工廠(factory-method)

<bean id="persionBean2" class="com.my.PersionBean.impl.PersionBeanFactory" lazy-init="true" factory-method="creBeanFactory"></bean>

1.3通過工廠非靜態

<bean id="persionBean3" class="com.my.PersionBean.impl.PersionFactory" ></bean>

<bean id="persionBean4" factory-bean="persionBean3" scope="prototype" factory-method="createOrderFactory"></bean>

2.註入bean

<property name="persion" ref="persionBean4" ></property>

3.註入其他屬性

<property name="name" value="校長"></property>

<property name="age" value="15"></property>

<property name="habits">

4.註入List<>屬性

<property name="habits">

<list>

<value>第一個</value>

<value>第二個</value>

<value>第三個</value>

</list>

</property>

5.通過<constructor-arg index="0" value="xiaozhang"></constructor-arg>構造函數index參數索引

6.對象的創建scope

scope="prototype" 實體模式(多個對象)

scope="singleton"單例模式(default)在容器只有一個對象

另外還有session,request 

    通過註解方式註入

<context:annotation-config/>//開啟註解

通過@Resource(name="student")指定beanid註入 通過@Autowired@Qualifier(value="student")(命名id)註入

通過註解方式創建bean

@Component (任何)

@Repository(value="student")數據訪問)

@Controller(控制)

@Service(服務)

  . @Scope("prototype")指定域)

@PostConstruct初始化方法)

@PreDestroy銷毀方法)

7.aop切麵

使用jdk進行許可權代理

必須有介面

@Aspect

public class MyIntercepter {

@Pointcut("execution (* com.my.aop.impl.PersionServiceBean.*(..))")

private void anyMethod() {//聲明切入點

 

}

@Before("anyMethod()&&args(name)")

private void doAccessCheck(String name){

System.out.println("這是前置通知");

}

@AfterReturning(pointcut="anyMethod()",returning="result")

private String doAfterReturn(String result){

System.out.println("這是後置通知"+result);

return result;

}

@AfterThrowing("anyMethod()")

private void doAfterThrow(){

System.out.println("這是例外通知");

}

@After("anyMethod()")

private void doAfter(){

System.out.println("這是最終通知");

}

@Around("anyMethod()")

public Object around(ProceedingJoinPoint point) throws Throwable{

System.out.println("這是環繞通知");

Object resultObject=point.proceed();

System.out.println("推出");

return resultObject;

 

}

 

使用cglib註解方式  <aop:aspectj-autoproxy/>啟動註解)

 

public class MyIntercepter {

@Pointcut("execution (* com.my.aop.impl.PersionServiceBean.*(..))")

private void anyMethod() {//聲明切入點

 

}

@Before("anyMethod()&&args(name)")

private void doAccessCheck(String name){

System.out.println("這是前置通知");

}

@AfterReturning(pointcut="anyMethod()",returning="result")

private String doAfterReturn(String result){

System.out.println("這是後置通知"+result);

return result;

}

@AfterThrowing("anyMethod()")

private void doAfterThrow(){

System.out.println("這是例外通知");

}

@After("anyMethod()")

private void doAfter(){

System.out.println("這是最終通知");

}

@Around("anyMethod()")

public Object around(ProceedingJoinPoint point) throws Throwable{

System.out.println("這是環繞通知");

Object resultObject=point.proceed();

System.out.println("推出");

return resultObject;

 

}

}

使用xml

   <aop:aspectj-autoproxy/>

    <bean id="persionServiceBean" class="com.my.aop.impl.PersionServiceBean"></bean>

     <bean id="interceptor" class="com.my.aop.impl.myInterceptor"> </bean>

     <aop:config>

     <aop:aspect id="aspect" ref="interceptor">

     <aop:pointcut expression="execution (* com.my.aop.impl.PersionServiceBean.*(..))" id="mycut"/>

     <aop:before  method="doAccessCheck" pointcut-ref="mycut"/>

     <aop:around method="around" pointcut-ref="mycut"/>

     </aop:aspect>

     </aop:config>

 

 

springjdbc操作

<context:property-placeholder location="classpath:jdbc.properties"/>(引入屬性文件)

     (創建dataSource)  <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

       <property name="driverClassName" value="${driverClassName}"></property>

       <property name="url" value="${url}"></property>

       <property name="username" value="${username}"></property>

         <property name="password" value="${password}"></property>

         <property name="maxActive" value="${maxActive}"></property>

         <property name="initialSize" value="${initialSize}"></property>

         <property name="maxIdle" value="${maxIdle}"></property>

         <property name="minIdle" value="${minIdle}"></property>

       </bean>

<bean  id="txManager" (創建事物bean)class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

  <property name="dataSource" ref="dataSource"></property>

 </bean>

以註解方式

<tx:annotation-driven transaction-manager="txManager" />(啟動註解)

xml

<aop:config>

 <aop:pointcut expression="execution(* com.my.jdbc.service.impl.StudentService.*(..))" id="transactionPointCut"/>

 <aop:advisor advice-ref="txAdvice" pointcut-ref="transactionPointCut"/>

 </aop:config>

 <tx:advice id="txAdvice" transaction-manager="txManager">

 <tx:attributes>

 <tx:method name="get*" propagation="NOT_SUPPORTED"/>

 <tx:method name="*" />

 </tx:attributes>

 </tx:advice>

詳細見例子

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 分類:C#、Android、百度地圖應用; 日期:2016-02-04 一、簡介 百度地圖SDK為廣大開發者開放了OpenGL繪製介面,幫助開發者在地圖上實現更靈活的樣式繪製,豐富地圖使用效果體驗。 二、運行截圖 簡介:介紹如何使用OpenGL在地圖上實現自定義繪製。 詳述: (1)利用OpenGL...
  • .net coreclr 已經發佈RC1版本,安裝方法如下: 1.安裝DNVM,DNVM是.net運行時管理器,負責管理所有版本的.net運行時(.net framework、.net coreclr和Mono)。 C:\coreclr-demo> @powershell -NoProfile -E
  • 分類:C#、Android、百度地圖應用; 日期:2016-02-04 百度全景圖是一種實景地圖服務。為用戶提供城市、街道和其他環境的360度全景圖像,用戶可以通過該服務獲得如臨其境的地圖瀏覽體驗。 本示例演示如何利用百度Android全景SDK v2.2實現全景圖的檢索、顯示和交互功能,以便清晰方...
  • 如果想知道 AngularJs 通過WebAPI 下載Excel。請看下文,這裡僅提供了一種方案。 伺服器端代碼如下: protected HttpResponseMessage GenereateExcelMessage(HttpRequestMessage Request, string fil
  • 分類:C#、Android、百度地圖應用; 日期:2016-02-04 一、簡介 線路規劃支持以下功能: 公交信息查詢:可對公交詳細信息進行查詢; 公交換乘查詢:根據起、終點,查詢策略,進行線路規劃方案; 駕車線路規劃:提供不同策略,規劃駕車路線;(支持設置途經點) 步行路徑檢索:支持步行路徑的規劃...
  • 本文翻譯自《effective modern C++》,由於水平有限,故無法保證翻譯完全正確,歡迎指出錯誤。謝謝! 根據std::move和std::forward不能做什麼來熟悉它們是一個好辦法。std::move沒有move任何東西,std::forward沒有轉發任何東西。在運行期,它們沒有做
  • 數據類型 可以使用BIF type()來查看對象的類型 數字 int float long 布爾(bool) True 機內表示1,機器識別非0 False 機內表示0,機器識別0 空值 None 字元串(str) 移除空格(strip) 分割(split) 長度(len) 列表(list) hel
  • Jemalloc最初是Jason Evans為FreeBSD開發的新一代記憶體分配器, 用來替代原來的 phkmalloc, 最早投入使用是在2005年. 到目前為止, 除了原版Je, 還有很多變種 被用在各種項目里. Google在android5.0里將bionic中的預設分配器從Dl替換為Je,...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...