小弟使用ssh和ssm做过项目,这里的s总有一个是spring,那么为啥spring有如此超然的地位呢?表现层的servlet,struts和springmvc,数据层的jdbc,mybatis和hibernate,单做为整合的框架只有spring了,实施证明,spring的ioc和aop确实是一件神器,这里写下aop运用中的日志问题.
既然要说aop,那么帮我巩固下知识,aop编程是面向切面的编程,aop的8个基本概念:连接点,切入点,关注点,切面,目标对象,通知,aop代理,植入.
下面一一介绍,并且以hibernate加spring事务举例:
连接点:代表程序执行过程中特定的方法,如果对事务的的话就是逻辑层中的具体方法.
切入点:连接点的集合,这个是逻辑层的所有方法.
关注点:程序员锁关注的共性,这个应该是aop配置总切面的expression中的东西吧.
切面:是切入点的集合,是所有模块逻辑层的方法的集合
关注对象:包含了连接点的对象
通知:关注点的实现.具体功能的实现
aop代理:把功能回帖到目标对象,具体功能的实现
植入:实现aop声明的功能.具体功能的实现
我觉着最后的三个是没有必要分的,嘿嘿!
接着说下通知,分为5种,
before:方法执行器前
after:执行后
after-return:成功执行
after-throwing:执行失败
around:这个功能是最全的,包括执行前和执行后
代码玩玩,applicationContext.xml中的配置:
<!--声明bean实例-->
<bean id="myAdvice" class="com.javakc.aop.MyAdvice"> </bean>
<!--配置aop-->
<aop:config>
<!--作为myAdvice的切面-->
<aop:aspect ref="myAdvice">
<!--切入点,expression是关注的对象-->
<aop:pointcut id="kc" expression="execution(* com.javakc..*.*Servlet.*())"/>
<!--通知,代理-->
<aop:around pointcut-ref="kc" method="addLog"/> </aop:aspect>
</aop:config>
举例执行代码:
public class MyAdvice {
Logger log=Logger.getLogger(MyAdvice.class);
public Object addLog(ProceedingJoinPoint pjp){ log.info(pjp.METHOD_CALL);
Object retVal=pjp.proceed();
return retVal;
}
}