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 註解 |
@Autowired(required=false)
關閉默認行爲。@Autowired @Qualifier("student1")
註釋,指定哪個真正的 bean 被裝配。@PostConstruct | 相似 init-method |
---|---|
@PreDestroy | 相似destroy-method |
@Resource | 遵循 by-name 自動鏈接語義, |
注意: @Resource(name= "spellChecker")
沒有明確指定一個 ‘name’,在字段的狀況下,默認使用字段名;在一個 setter 方法狀況下,它默認使用 bean 屬性名稱。web
@Bean(initMethod = "init", destroyMethod = "cleanup" )
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 接口。數據庫
可按照如下幾步實現express
extends ApplicationEvent
好比:CustomEvent。這個類必須定義一個默認的構造函數,它應該從 ApplicationEvent 類中繼承的構造函數。implements ApplicationEventPublisherAware
並在XML 配置文件中聲明這個類做爲一個 bean。CustomEvent ce = new CustomEvent(this);
publisher.publishEvent(ce);
}
複製代碼
接着同系統事件實現監聽。編程
Spring AOP:面向切面的編程。 模塊提供攔截器來攔截一個應用程序,例如,當執行一個方法時,你能夠在方法執行以前或以後添加額外的功能。bash
爲了在本節的描述中使用 aop 命名空間標籤,你須要導入 spring-aop j架構,架構
aspectjrt.jar
aspectjweaver.jar
aspectj.jar
aopalliance.jar
<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>
複製代碼
aspectjrt.jar
aspectjweaver.jar
aspectj.jar
aopalliance.jar
<aop:aspectj-autoproxy/>
@Aspect
註解,而後在xml配置。實例: ‘getname’ 切點,與 com.tutorialspoint 包下的 Student 類中的 getName() 相匹配:
@Pointcut("execution(* com.tutorialspoint.Student.getName(..))")
private void getname() {}
複製代碼
@Before("businessService()")
public void doBeforeTask(){
...
}
複製代碼
JDBC 框架負責全部的低層細節,從開始打開鏈接,準備和執行 SQL 語句,處理異常,處理事務,到最後關閉鏈接。JdbcTemplate
關鍵類 JdbcTemplate 類執行 SQL 查詢、更新語句和存儲過程調用,執行迭代結果集和提取返回參數值。捕獲並轉化異常。
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 {}