真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SSM框架之Spring怎么用

這篇文章給大家分享的是有關(guān)SSM框架之Spring怎么用的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

陽(yáng)原ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!

IoC (Inversion of Control)

控制反轉(zhuǎn):對(duì)對(duì)象(beans)控制權(quán)的轉(zhuǎn)移,從程序代碼本身反轉(zhuǎn)到了外部容器(xml配置文件, applicationContext.xml)

  • 對(duì)象的創(chuàng)建不是在view層,而是通過(guò)xml配置文件生成的容器創(chuàng)建

配置文件:



      
   
   
    

程序與配置文件:

ApplicationContext容器:反應(yīng)速度快/占用資源

ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");       //創(chuàng)建容器對(duì)象(對(duì)象bean也創(chuàng)建了)
ISomeService service = (ISomeService) ac.getBean("myService");                              //從容器獲取對(duì)象   
service.doSome();

BeanFactory容器:反應(yīng)速度慢/省資源(因?yàn)閟cope="prototype"的存在,已棄用)

BeanFactory bf = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));        //創(chuàng)建容器對(duì)象(對(duì)象bean沒(méi)創(chuàng)建)
ISomeService service = (ISomeService) bf.getBean("myService");            
service.doSome();

bean的裝配

裝配即對(duì)象的生成

(1)默認(rèn)方式

  • 調(diào)用類的無(wú)參構(gòu)造器

(2)動(dòng)態(tài)工廠bean

  • 通過(guò)工廠類創(chuàng)建對(duì)象




     //通過(guò)factory對(duì)象中的getSomeService方法創(chuàng)建myService對(duì)象   //scope:原型模式,每次對(duì)象都是新的(獲取對(duì)象的是否才創(chuàng)建對(duì)象)

(3)靜態(tài)工廠bean

    靜態(tài)工廠不需要?jiǎng)?chuàng)建對(duì)象

(4)bean后處理器

(5)bean的生命周期

基于XML的DI(依賴注入)

注入:對(duì)對(duì)象屬性賦值

(1)分類

  • 設(shè)值注入:通過(guò),前提:在類里面有set方法


      
                         
   
  • 構(gòu)造注入:

(2)集合屬性注入值

(3)指定多個(gè)配置文件

ApplicationContext ac = new ClassPathXmlApplicationContext("spring-*.xml");         //可變參數(shù)

基于注解的DI

注釋:替換spring配置文件中bean的注冊(cè)

@Component(value="mySchool")                 //表示當(dāng)前類被Spring容器所管理
public class School {
   @Value(value="清華大學(xué)")
   private String name;

AOP (Aspect Orient Programming)

面向切片編程:切面——交叉業(yè)務(wù)邏輯(通知advice/顧問(wèn)advisor,對(duì)主業(yè)務(wù)的增強(qiáng)),主業(yè)務(wù)邏輯(需要做的,在接口中定義的方法)

aop思想讓系統(tǒng)業(yè)務(wù)邏輯和主業(yè)務(wù)邏輯分開(kāi)開(kāi)發(fā),底層使用動(dòng)態(tài)代理增強(qiáng)主業(yè)務(wù)邏輯

術(shù)語(yǔ):

  1. 通知(Advice)

  2. 連接點(diǎn)(JoinPoint)

  3. 切入點(diǎn)(Pointcut)

  4. 切面(Aspect):包含通知的類,對(duì)目標(biāo)方法增強(qiáng)的類

  5. 引入(introduction)

  6. 目標(biāo)(target)

  7. 代理(proxy)

  8. 織入(weaving)

(1)Advice通知

  • 前置通知:目標(biāo)方法執(zhí)行之前執(zhí)行

public class MyMethodBeforeAdvice implements MethodBeforeAdvice {
   //當(dāng)前方法在目標(biāo)方法執(zhí)行前執(zhí)行
   //method:目標(biāo)方法
   //args:目標(biāo)方法的參數(shù)列表
   //target:目標(biāo)對(duì)象
   @Override
   public void before(Method method, Object[] args, Object target) throws Throwable {
      //對(duì)目標(biāo)方法的增強(qiáng)代碼寫在這里!
      System.out.println("執(zhí)行前置通知方法");
   }
}



 

 
 

   
                       
   
   
public class MyTest {
   @Test
   public void test01() {                                      
      ApplicationContext ac = new ClassPathXmlApplicationContext("aop02/applicationContext.xml");   
      ISomeService service = (ISomeService) ac.getBean("serviceProxy");                                //代理對(duì)象
      service.doFirst();
      System.out.println("=================");
      service.doSecond();
   }
}
  • 后置通知:目標(biāo)方法執(zhí)行之后執(zhí)行

public class MyAfterReturningAdvice implements AfterReturningAdvice {
   //在目標(biāo)方法執(zhí)行之后執(zhí)行
   //returnValue:目標(biāo)方法的返回值,可以獲取但是不能改變
   @Override
   public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {
      System.out.println("執(zhí)行后置通知方法 returnValue=" + returnValue);
   }
}



 

 
 

                       
   
  • 環(huán)繞通知:目標(biāo)方法執(zhí)行前后都執(zhí)行

public class MyMethodinterceptor implements MethodInterceptor {
   @Override
   public Object invoke(MethodInvocation invocation) throws Throwable {
      System.out.println("執(zhí)行環(huán)繞通知:目標(biāo)方法執(zhí)行之前");
      //執(zhí)行目標(biāo)方法
      Object result = invocation.proceed();                      //類似于method.invoke()
      System.out.println("執(zhí)行環(huán)繞通知:目標(biāo)方法執(zhí)行之后");
      return result;                                              //可獲取目標(biāo)方法結(jié)果,且能修改
   }
}
  • 異常通知:當(dāng)目標(biāo)方法拋出指定類型的異常時(shí),執(zhí)行當(dāng)前方法

public class MyThrowsAdvice implements ThrowsAdvice {
   public void afterThrowing(UsernameException ex) {
      System.out.println("發(fā)生用戶名異常:" + ex.getMessage());
   }
   public void afterThrowing(PasswordException ex) {
      System.out.println("發(fā)生密碼異常:" + ex.getMessage());
   }
   //其他異常執(zhí)行該方法
   public void afterThrowing(Exception ex) {
      System.out.println("異常:" + ex.getMessage());
   }
}

(2)Advisor顧問(wèn)

通知會(huì)增強(qiáng)所有的目標(biāo)方法,增強(qiáng)某些目標(biāo)方法需要用顧問(wèn),對(duì)通知進(jìn)行了包裝

  • 名稱匹配切入點(diǎn)顧問(wèn)




 

 
 
          //名稱匹配
   
   
                                                       //*****
   
   


 

                       
                       //*****代理用的顧問(wèn)
  • 正則表達(dá)式匹配切入點(diǎn)顧問(wèn)




 

 
 

   
   
   
                              
  • 自動(dòng)代理生成器DefaultAdvisorAutoProxyCreator

不用指定需要代理的對(duì)象,都會(huì)生成代理,引用的也直接是目標(biāo)對(duì)象

  • 名稱自動(dòng)代理生成器BeanNameAutoProxyCreator

(3)AspectJ對(duì)AOP的實(shí)現(xiàn)

AspectJ:是一個(gè)面向切面的框架,定義了AOP語(yǔ)法。

Spring并入了AspectJ框架

AspectJ和Spring對(duì)AOP實(shí)現(xiàn)的區(qū)別:

  1. aspectj多一個(gè)最終通知(無(wú)論怎樣都會(huì)執(zhí)行)

切入點(diǎn)表達(dá)式:

AspectJ基于注解的AOP:

  • 前置通知








@Before("execution(* *..ISomeService.doFirst(..))")       //切入點(diǎn)表達(dá)式
public void myBefore() {
   System.out.println("執(zhí)行前置通知方法");
}

AspectJ基于XML的AOP:







                                                                //*****

   
   
   
   
   
      
      
      
      
      
      
      
      
      
      
      
      
   
// 切面
public class MyAspect {
   
   public void myBefore() {
      System.out.println("執(zhí)行前置通知方法");
   }
}

Spring與Dao

Spring與JDBC模板

為了避免直接使用JDBC帶來(lái)復(fù)雜和冗長(zhǎng)的代碼,Spring提供了一個(gè)強(qiáng)有力的模板類jdbcTemplate來(lái)簡(jiǎn)化JDBC操作

(1)基礎(chǔ)操作

  • 注冊(cè)數(shù)據(jù)源


   
   
   
   
  • 注冊(cè)jdbcTemplate



              //含具體增刪改查
   
  • 注冊(cè)服務(wù)



                                           //***依賴注入

注:   依賴注入,初始化對(duì)象屬性,在studentService對(duì)象中可使用dao對(duì)象中的方法,dao對(duì)象中的方法含有sql語(yǔ)句,sql語(yǔ)句通過(guò)jdbc模板對(duì)象與數(shù)據(jù)庫(kù)操作

(2)進(jìn)階

  • 查詢返回結(jié)果得封裝

public List selectAllStudents() {
   String sql = "select id,name,age from student";
   return this.getJdbcTemplate().query(sql, new StudentRowMapper());
}
public class StudentRowMapper implements RowMapper {

   // rs:當(dāng)查詢出總的結(jié)果集后,框架會(huì)自動(dòng)遍歷這個(gè)結(jié)果集,每一次遍歷的一行數(shù)據(jù),都會(huì)被存放到
   //     這個(gè)方法的rs參數(shù)中。也就是說(shuō),這里的rs代表的是一行數(shù)據(jù),并非所有查詢結(jié)果。換個(gè)角度
   //     來(lái)說(shuō),只要能執(zhí)行到這個(gè)方法,就說(shuō)明這里的rs不會(huì)是空的
   @Override
   public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
      Student student = new Student();
      student.setId(rs.getInt("id"));
      student.setName(rs.getString("name"));
      student.setAge(rs.getInt("age"));
      return student;
   }

Spring與事務(wù)管理

事務(wù):數(shù)據(jù)庫(kù)概念即關(guān)于數(shù)據(jù)庫(kù)的一系列操作

Spring事務(wù)默認(rèn)回滾方式:發(fā)生運(yùn)行異常時(shí)回滾,發(fā)生受查異常提交

事務(wù)管理主要是防止數(shù)據(jù)庫(kù)未按要求更改而出錯(cuò)

>>>將事務(wù)管理作為切面,在目標(biāo)方法執(zhí)行后執(zhí)行,如果整個(gè)目標(biāo)方法執(zhí)行沒(méi)出錯(cuò),則事務(wù)提交,否則事務(wù)回滾

事務(wù)管理的三種方法:

(1)事務(wù)代理工廠





   




   
                                //切面
   
      
         ISOLATION_DEFAULT,PROPAGATION_REQUIRED      //以open開(kāi)始的方法
         
         ISOLATION_DEFAULT,PROPAGATION_REQUIRED, -BuyStockException
      
   

(2)事務(wù)注解

(3)使用Aspect的AOP配置


   
   
   
      
   
   
   
   
      
         
         
         
      
   
   
   
   
      
      
      
   

Spring與MyBatis整合

(1)mapper動(dòng)態(tài)代理

MyBatis:

  • 主配置文件中的不用配置據(jù)庫(kù)連接池(Spring配置文件中)


   
         
   
   
           
   
  • dao不是在程序中通過(guò)sqlsessionFactory生成,而是在Spring配置文件中注入




   
   




   
   




   

(2)支持掃描的mapper動(dòng)態(tài)代理,為dao包底下的所有類生成代理對(duì)象



   
   

感謝各位的閱讀!關(guān)于“SSM框架之Spring怎么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!


當(dāng)前名稱:SSM框架之Spring怎么用
文章網(wǎng)址:http://weahome.cn/article/jhdegg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部