什么是Aop?
答:面向切面编程
AOP的目的:
AOP能将与业务无关,但是又被所有业务模块共用的代码抽离出来,使用动态代理技术在容器的运行期间,动态的织入其中,减少了重复代码,降低了耦合度,提升系统的可维护性.
AOP中的重要概念:
切入点:在哪些类,哪些方法上切入
通知(增强):在方法执行的什么时机(在方法之前,之后,异常等),做什么(增强);
切面:切入点+通知(在什么地方,时间做什么);如:在烧饼上,在顾客来的时候,将肉加入到烧饼中;
织入:把切面加入到真实对象然后创建代理类的全过程(由Spring容器动态完成,不需要我们去管)
事务应该控制在哪一层?
我们使用事务主要是因为:事务可以让多条sql要么一起成功,要么一起失败,例如张三给李四转钱,会发生两条update语句如果将事务写在dao层的话,每一个update语句分别是一个事务,这样的话是两个事务,并且中间没有任何关联无法做到一起成功一起失败.如果将事务控制在service层,由service层去调用两次update语句,这样只产生一个事务,大家要么一起成功,要么一起失败.
execution(* com.zzx.service..*(..))
代表service包下所有类以及其子包下所有类的所有方法
execution(* com.zzx.service.impl.UserServiceImpl.*(..))
代表userserviceimpl类中的所有方法
execution(* com.zzx.service..add*(..))
代表service包下所有类以及其子包下所有类的add开头的方法
execution(* com.zzx.service.*.*(..))
代表service包下所有类以及其子包下所有类的所有方法
使用注解来简化AOP,@After(EDP)会优先于@AfterReturning(EDP)执行
数据库连接池:
每次连接数据库都需要打开一个全新的连接,而每一个连接都需要消耗很多电脑的性能,如果每个连接只使用一次
就关闭掉的话,非常的消耗系统性能,这个时候我们可以使用数据库连接池,使用连接的时候直接从连接池获取,当
使用完毕后连接会自动返回到连接池中,这会自动返回到连接池中,这样可以达到一个连接反复利用的效果,非常节
省系统性能。
Spring的事务管理:
TransactionDefinition:用于设置事务的隔离级别,超时时间,是否为只读事务等。
PlatformTransactionManager:事务管理器,可以通过其获取事务,以及事务的属性配置信息,开启,提交...等。
Transactionstatus:封装了事务的各种状态,是否开启,是否提交,在某些异常下是否回滚。