AOP——面向切面
术语
AOP框架——AspectJ
基于注解
要在 Spring 中声明 AspectJ 切面, 只需要在 IOC 容器中将切面声明为 Bean 实例. 当在 Spring IOC 容器中初始化 AspectJ 切面之后, Spring IOC 容器就会为那些与 AspectJ 切面相匹配的 Bean 创建代理。
在切面类中需要定义切面方法用于响应的目标方法,切面方法即为通知方法,通知方法需要用注解标识,AspectJ 支持 5 种类型的通知注解:
@Aspect:作用是把当前类标识为一个切面供容器读取
@Pointcut:Pointcut是植入Advice的触发条件。每个Pointcut的定义包括2部分,一是表达式,二是方法签名。
方法签名必须是 public及void型。可以将Pointcut中的方法看作是一个被Advice引用的助记符,因为表达式不直观,因此我们可以通过方法签名的方式为 此表达式命名。因此Pointcut中的方法只需要方法签名,而不需要在方法体内编写实际代码。
@Order:定义Spring IOC容器中Bean的执行顺序的优先级。数字越小,优先级越高。
@Before: 前置通知, 在方法执行之前执行
@After: 后置通知, 在方法执行之后执行 。
@AfterRunning: 返回通知, 在方法返回结果之后执行
@AfterThrowing: 异常通知, 在方法抛出异常之后
@Around: 环绕通知, 围绕着方法执行
基于XML
JDBC
jdbcTemplate
- update:单条语句更新数据库
- batchUpdate:批量更新数据库
- queryForObject:查询单行
- query:查询多行。
(sql, params, mapper) 当查询数据库返回的是多列数据,且需要将多列数据映射到某个实体类上,那么就该使用这个RowMapper - queryForObject:单值查询或统计查询
- BeanPropertyRowMapper
- 不支持级联属性
- 线程安全
具名参数
jdbcDaoSupport
JdbcDaoSupport是Spring内置的一个Dao层的基类,来自spring-jdbc-4.2.4.RELEASE.jar这个包,其内部定义了JdbcTemplate的set方法,这样我们自己的dao类只需要继承JdbcDaoSupport类,就可以省略JdbcTemplate的set方法书写了,通过查看源码你会发现,该方法是final修饰的也就是说,子类是无法覆盖的。
另外,它还提供了注入数据库连接池的set方法。从该方法可以发现,如果我们在Spring配置文件中没有注入jdbcTemplate ,那么可以通过注入DataSource 的时候自动创建jdbcTemplate,这样一来又可以省略JdbcTemplate类的注册工作了。
说白了,JdbcDaoSupport就是为了简化我们dao类有关JdbcTemplate的注入的相关工作量。
如果需要用到JdbcTemplate,只需要调用JdbcDaoSupport的getJdbcTemplate方法即可获取。