Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。
◆目的:解决企业应用开发的复杂性
◆功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能
◆范围:任何Java应用
Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。
spring的优势1.JAVA EE应该更加容易使用。
2.面向对象的设计比任何实现技术(比如JAVA EE)都重要。
3.面向接口编程,而不是针对类编程。Spring将使用接口的复杂度降低到零。
4.代码应该易于测试。Spring框架会帮助你,使代码的测试更加简单。
5.JavaBean提供了应用程序配置的最好方法。
6.在Java中,已检查异常(Checked exception)被过度使用。框架不应该迫使你捕获不能恢复的异常。
spring体系结构 spring中的环绕日志
public void aroundPrintLog(ProceedingJoinPoint point) {
System.out.println("Logger类中的aroundPrintLog方法开始记录日志了");
}
问题:
当我们配置了环绕通知后,切入点方法没有执行,而通知方法执行了
分析:
通过对比动态代理中的环绕通知代码,发现动态代理的环绕通知有明确的切入点方法调用,
而我们的代码中没有
解决:
Spring框架为我们提供了一个接口:ProceedingJoinpoint。该接口会有一个方法 proceed() ,此方法就相当于明确调用切入点方法
该接口可以作为环绕通知的方法参数,在程序执行时,spring框架会为我们提供该接口的实现类供我们使用
spring中的环绕通知
他是spring框架为我们提供的一种可以在代码中手动控制增强方法何时执行的方式
public Object aroundPrintLog(ProceedingJoinPoint point) {
Object rtValue = null;
try {
Object[] args = point.getArgs();//得到方法执行所需的参数
System.out.println("Logger类中的aroundPrintLog方法开始记录日志了...前置");
rtValue = point.proceed(args);//明确调用业务层方法(切入点方法)
System.out.println("Logger类中的aroundPrintLog方法开始记录日志了...后置");
return rtValue;
} catch (Throwable throwable) {
System.out.println("Logger类中的aroundPrintLog方法开始记录日志了...异常");
throw new RuntimeException(throwable);
} finally {
System.out.println("Logger类中的aroundPrintLog方法开始记录日志了...最终");
}
}
基于注解
注:注解配置事务的属性不如xml方便
作者:Mr.东方老赢