Spring MVC 簡述

zhulk發表於2018-03-31

Spring MVC

Spring 2.5 開始就可以使用註解,需要在配置檔案中啟用。 你可以使用相關類,方法或欄位宣告的註解,將 bean 配置移動到元件類本身。

啟用

<context:annotation-config/>

常用註解

@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 屬性名稱。

java 註解

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

Spring 中的事件分為以下幾類

基本事件

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

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

注意:Spring 的事件處理是單執行緒的,所以如果一個事件被髮布,直至並且除非所有的接收者得到的該訊息,該程式被阻塞並且流程將不會繼續。

監聽上下文事件

為了監聽上下文事件,一個 bean 應該實現只有一個方法 onApplicationEvent() 的 ApplicationListener 介面。

Spring 中的自定義事件

可按照以下幾步實現

  1. 建立一個事件類,extends ApplicationEvent 比如:CustomEvent。這個類必須定義一個預設的建構函式,它應該從 ApplicationEvent 類中繼承的建構函式。
  2. 釋出事件,implements ApplicationEventPublisherAware並在XML 配置檔案中宣告這個類作為一個 bean。
      CustomEvent ce = new CustomEvent(this);
      publisher.publishEvent(ce);
   }
複製程式碼

接著同系統事件實現監聽。

Spring 框架的 AOP

Spring AOP:面向切面的程式設計。 模組提供攔截器來攔截一個應用程式,例如,當執行一個方法時,你可以在方法執行之前或之後新增額外的功能。

為了在本節的描述中使用 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跑碼場

相關文章