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 註解 |
- @Required表明受影響的 bean 屬性在配置時必須放在 XML 配置檔案中,否則容器就會丟擲一個 BeanInitializationException 異常。
- @Autowired 註釋自動注入。可以用在屬性或者建構函式中。**注意:**預設意味著依賴是必須的,然而可用
@Autowired(required=false)
關閉預設行為。 - @Qualifier 多個相同型別的 bean 只裝配一個時,你可以使用
@Autowired @Qualifier("student1")
註釋,指定哪一個真正的 bean 被裝配。 - 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 中的自定義事件
可按照以下幾步實現
- 建立一個事件類,
extends ApplicationEvent
比如:CustomEvent。這個類必須定義一個預設的建構函式,它應該從 ApplicationEvent 類中繼承的建構函式。 - 釋出事件,
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配置實現
- 宣告一個 aspect:一個 aspect 是使用 元素宣告的,支援的 bean 是使用 ref 屬性引用的,如下所示
- 宣告一個切入點: 一個切入點有助於確定使用不同建議執行的感興趣的連線點(即方法)。
- 宣告建議 你可以使用 <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>
複製程式碼
註解實現
- 引入引入lib
-
aspectjrt.jar
-
aspectjweaver.jar
-
aspectj.jar
-
aopalliance.jar
- 在xml 中配置支援@AspectJ
<aop:aspectj-autoproxy/>
- 宣告一個 aspect和其他任何正常的 bean 一樣,用
@Aspect
註解,然後在xml配置。 - 宣告一個切入點,即關注點。
例項: ‘getname’ 切點,與 com.tutorialspoint 包下的 Student 類中的 getName() 相匹配:
@Pointcut("execution(* com.tutorialspoint.Student.getName(..))")
private void getname() {}
複製程式碼
- 宣告建議:可用@{ADVICE-NAME} 註釋宣告五個建議中的任意一個例子:
@Before("businessService()")
public void doBeforeTask(){
...
}
複製程式碼
Spring JDBC 框架
JDBC 框架負責所有的低層細節,從開始開啟連線,準備和執行 SQL 語句,處理異常,處理事務,到最後關閉連線。JdbcTemplate
關鍵類
JdbcTemplate 類執行 SQL 查詢、更新語句和儲存過程呼叫,執行迭代結果集和提取返回引數值。捕獲並轉化異常。
- 引入對應的庫mysql-connector-java.jar,org.springframework.jdbc.jar 和 org.springframework.transaction.jar。
- 配置資料來源 )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 {}