日期:2014-05-16 浏览次数:20431 次
1.spring的AOP AOP(Aspect-Oriented Programming, 面向切面编程):利用的是动态代理技术. 好处: 每个事物逻辑位于一个位置, 代码不分散, 便于维护和升级业务模块更简洁, 只包含核心业务代码. 2.在AOP中经常用的到术语: 切面(Aspect): 横切关注点(跨越应用程序多个模块的功能)被模块化的特殊对象 通知(Advice): 切面必须要完成的工作 目标(Target): 被通知的对象 代理(Proxy): 向目标对象应用通知之后创建的对象 切入点(PointCut): 切面通知执行的”地点”的定义 连接点(Jointpoint): 与切入点匹配的执行点 AspectJ: Java 社区里最完整最流行的 AOP 框架. 3.在 Spring 中启用 AspectJ 注解支持 包:lib\aspectj\aspectjrt.jar 和 aspectjweaver.jar XML:<aop:aspectj-autoproxy> java:在类前@Aspect 方法前: @Before: 前置通知, 在方法执行之前执行 @After: 后置通知, 在方法执行之后执行 @AfterRunning: 返回通知, 在方法返回结果之后执行 将 returning="result" 属性添加到 @AfterReturning 注解中.在方法中使用 result 就可以直接得到. @AfterThrowing: 异常通知, 在方法抛出异常之后 将 throwing 属性添加到 @AfterThrowing 注解中 @Around: 环绕通知, 围绕着方法执行 连接点的参数类型必须是 ProceedingJoinPoint ProceedingJoinPoint 的 proceed() 方法来执行被代理的方法 切入点定义: @Pointcut 一个空的方法前声明,引用时写这个方法的方法名加括号. 可以用 && || ! 合并切入点 切入点表达式:execution(* ArithmeticCalculator.add(int, ..)) || execution(* ArithmeticCalculator.mul(int, ..) 在方法中声明 JoinPoint : 得到方法名joinpoint.getSignature().getName(); 输出参数:Arrays.asList(joinpoint.getArgs()) 指定切面的优先级: @Order(2) 值越小,优先级越高. 4.引入通知 @DeclareParents 注解类型的 value 属性表示哪些类是当前引入通知的目标. value 属性值也可以是一个 AspectJ 类型的表达式, 以将一个即可引入到多个类中. defaultImpl 属性中指定这个接口使用的实现类 5.使用XML方式进行配置 基于注解的声明要优先于基于 XML 的声明. <aop:config> 横切性关注点 <aop:pointcut expression="execution(* cn.itcast.spring.aop.xml.*.*(..))" id="pointcut"/> AOP 的切面信息都要配置在这个里面 <aop:aspect ref="LogginAspect"> 前置通知 <aop:before method="beforeLog" pointcut-ref="pointcut"/> 后置通知 <aop:after method="afterLog" pointcut-ref="pointcut"/> 返回通知 <aop:after-returning method="afterReturningLog" pointcut-ref="pointcut" returning="result"/> 异常通知 <aop:after-throwing method="afterThrowingLog" pointcut-ref="pointcut" throwing="e"/> 环绕通知 <aop:around method="aroundLog" pointcut="execution(* cn.itcast.spring.aop.xml.ArithmeticCalculatorImpl.mul(..))"/> </aop:aspect> </aop:config> 6.spring 对JDBC的支持 JdbcTemplate 类被设计成为线程安全的 JdbcTemplate 只有 setter 方法, SimpleJdbcTemplate 只有构造方法.所以要注意注入 dataSource 的方式. JdbcTemplate 的注入,使用的是 org.springframework.jdbc.core.JdbcTemplate . 并且要使用 setter 方式注入 <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"/> </bean> SimpleJdbcTemplate 的注入,使用的 org.springframework.jdbc.core.simple.SimpleJdbcTemplate 类, 并且要使用构造方法注入. 从 JdbcTemplate 演变而来, 它利用 Java 1.5 的特性(自动装箱, 泛型, 可变长度等)来简化开发 <bean id="simpleJdbcTemplate" class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate"> <constructor-arg ref="dataSource"/> </bean>