Spring MVC 簡述

Spring MVC

Spring 2.5 開始就可使用註解,須要在配置文件中啓用。 你可使用相關類,方法或字段聲明的註解,將 bean 配置移動到組件類自己。java

啓用

<context:annotation-config/>mysql

經常使用註解

@Required 註解應用於 bean 屬性的 setter 方法
@Autowired 以應用到 bean 屬性的 setter 方法,非 setter 方法,構造函數和屬性
@Qualifier 經過指定確切的將被連線的 bean,@Autowired 和 @Qualifier 註解能夠用來刪除混亂
JSR-250 Annotations Spring 支持 JSR-250 的基礎的註解,其中包括了 @Resource,@PostConstruct 和 @PreDestroy 註解
  1. @Required代表受影響的 bean 屬性在配置時必須放在 XML 配置文件中,不然容器就會拋出一個 BeanInitializationException 異常。
  2. @Autowired 註釋自動注入。能夠用在屬性或者構造函數中。**注意:**默認意味着依賴是必須的,然而可用 @Autowired(required=false)關閉默認行爲。
  3. @Qualifier 多個相同類型的 bean 只裝配一個時,你可使用 @Autowired @Qualifier("student1")註釋,指定哪個真正的 bean 被裝配。
  4. Spring JSR-250註解:包
@PostConstruct 相似 init-method
@PreDestroy 相似destroy-method
@Resource 遵循 by-name 自動鏈接語義,

注意: @Resource(name= "spellChecker") 沒有明確指定一個 ‘name’,在字段的狀況下,默認使用字段名;在一個 setter 方法狀況下,它默認使用 bean 屬性名稱。web

java 註解

  • @Configuration 表明容器和 @Bean 表明注入對象
  • @import 註解容許從另外一個配置類中加載 @Bean 定義。
  • @Bean 註解支持指定任意的初始化和銷燬的回調方法,@Bean(initMethod = "init", destroyMethod = "cleanup" )
  • @Scope 註解的bean的範圍。

Spring 中的事件分爲如下幾類

基本事件

ApplicationContext,它負責管理 beans 的完整生命週期當啓動時回調。若是一個 bean 實現 ApplicationListener ,那麼每次 ApplicationEvent 被髮布到 ApplicationContext 上,那個 bean 會被通知。 Spring 提供瞭如下的標準事件:spring

ContextRefreshedEvent ApplicationContext 被初始化或刷新時,或者在使用 refresh() 方法來發生觸發
ContextStartedEvent start()觸發,此時能夠調查數據庫,或者重啓任何中止的應用程序。
ContextStoppedEvent stop()觸發,此時你能夠在接受到這個事件後作必要的清理的工做。
ContextClosedEvent close()觸發,一個已關閉的上下文到達生命週期末端;它不能被刷新或重啓。
RequestHandledEvent 這是一個 web-specific 事件,告訴全部 bean HTTP 請求已經被服務。

注意:Spring 的事件處理是單線程的,因此若是一個事件被髮布,直至而且除非全部的接收者獲得的該消息,該進程被阻塞而且流程將不會繼續。sql

監聽上下文事件

爲了監聽上下文事件,一個 bean 應該實現只有一個方法 onApplicationEvent() 的 ApplicationListener 接口。數據庫

Spring 中的自定義事件

可按照如下幾步實現express

  1. 建立一個事件類,extends ApplicationEvent 好比:CustomEvent。這個類必須定義一個默認的構造函數,它應該從 ApplicationEvent 類中繼承的構造函數。
  2. 發佈事件,implements ApplicationEventPublisherAware並在XML 配置文件中聲明這個類做爲一個 bean。
CustomEvent ce = new CustomEvent(this);
      publisher.publishEvent(ce);
   }
複製代碼

接着同系統事件實現監聽。編程

Spring 框架的 AOP

Spring AOP:面向切面的編程。 模塊提供攔截器來攔截一個應用程序,例如,當執行一個方法時,你能夠在方法執行以前或以後添加額外的功能。bash

爲了在本節的描述中使用 aop 命名空間標籤,你須要導入 spring-aop j架構,架構

  • aspectjrt.jar

  • aspectjweaver.jar

  • aspectj.jar

  • aopalliance.jar

xml配置實現
  1. 聲明一個 aspect:一個 aspect 是使用 元素聲明的,支持的 bean 是使用 ref 屬性引用的,以下所示
  2. 聲明一個切入點: 一個切入點有助於肯定使用不一樣建議執行的感興趣的鏈接點(即方法)。
  3. 聲明建議 你可使用 <aop:{ADVICE NAME}> 元素在一個 中聲明五個建議中的任何一個,以下所示
<aop:config>
   <aop:aspect id="myAspect" ref="aBean">
      <aop:pointcut id="businessService"
         expression="execution(* com.xyz.myapp.service.*.*(..))"/>
      <!-- a before advice definition -->
      <aop:before pointcut-ref="businessService" 
         method="doRequiredTask"/>
      <!-- an after advice definition -->
      <aop:after pointcut-ref="businessService" 
         method="doRequiredTask"/>
      <!-- an after-returning advice definition -->
      <!--The doRequiredTask method must have parameter named retVal -->
      <aop:after-returning pointcut-ref="businessService"
         returning="retVal"
         method="doRequiredTask"/>
      <!-- an after-throwing advice definition -->
      <!--The doRequiredTask method must have parameter named ex -->
      <aop:after-throwing pointcut-ref="businessService"
         throwing="ex"
         method="doRequiredTask"/>
      <!-- an around advice definition -->
      <aop:around pointcut-ref="businessService" 
         method="doRequiredTask"/>
   ...
   </aop:aspect>
</aop:config>
<bean id="aBean" class="...">
...
</bean>
複製代碼
註解實現
  1. 引入引入lib
  • aspectjrt.jar

  • aspectjweaver.jar

  • aspectj.jar

  • aopalliance.jar

  1. 在xml 中配置支持@AspectJ <aop:aspectj-autoproxy/>
  2. 聲明一個 aspect和其餘任何正常的 bean 同樣,用@Aspect註解,而後在xml配置。
  3. 聲明一個切入點,即關注點。

實例: ‘getname’ 切點,與 com.tutorialspoint 包下的 Student 類中的 getName() 相匹配:

@Pointcut("execution(* com.tutorialspoint.Student.getName(..))") 
private void getname() {}
複製代碼
  1. 聲明建議:可用@{ADVICE-NAME} 註釋聲明五個建議中的任意一個例子:
@Before("businessService()")
public void doBeforeTask(){
 ...
}
複製代碼

Spring JDBC 框架

JDBC 框架負責全部的低層細節,從開始打開鏈接,準備和執行 SQL 語句,處理異常,處理事務,到最後關閉鏈接。JdbcTemplate 關鍵類 JdbcTemplate 類執行 SQL 查詢、更新語句和存儲過程調用,執行迭代結果集和提取返回參數值。捕獲並轉化異常。

  1. 引入對應的庫mysql-connector-java.jar,org.springframework.jdbc.jar 和 org.springframework.transaction.jar。
  2. 配置數據源 )1 數據庫 TEST 中建立一個數據庫表 Student。
CREATE TABLE Student(
   ID   INT NOT NULL AUTO_INCREMENT,
   NAME VARCHAR(20) NOT NULL,
   AGE  INT NOT NULL,
   PRIMARY KEY (ID)
);
複製代碼

)2在xml中配置數據源到JdbcTemplate中。

<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
   <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
   <property name="url" value="jdbc:mysql://localhost:3306/TEST"/>
   <property name="username" value="root"/>
   <property name="password" value="password"/>
</bean>
複製代碼

3.jdbcTemplate 操做數據庫執行 CRUD jdbcTemplateObject.queryForInt( SQL );。可經過執行SQL 語句和DDL 語句 execute(..)建議先定義數據庫操做接口StudentDAO,而後實現 public class StudentJDBCTemplate implements StudentDAO {}

若有疏漏,請指出,若有問題能夠經過以下方式聯繫我

簡書 csdn 掘金 klvens跑碼場

相關文章
相關標籤/搜索