一,Spring框架
是一个轻量级的企业级应用框架
企业应用开发的"一站式"选择,贯穿于表现层、业务层、持久层
优点
低侵入式设计
独立于各种应用服务器
依赖注入特性将组件关系透明化,降低耦合度
面向切面编程特性允许将通用任务进行集中式处理
与第三方框架的良好整合
Spring体系结构:
二,Spring两大核心技术
1. 控制反转(IoC:Inversion of Control)/依赖注入(DI:Dependency Injection)
控制反转(loC)
控制反转是一种思想。
控制反转是为了降低程序耦合度,提高程序扩展力。
控制反转,反转的是什么?
将对象的创建权利交出去,交给第三方容器负责。
将对象和对象之间关系的维护权交出去,交给第三方容器负责。
依赖注入(DI)
Dl (Dependency Injection) :依赖注入,依赖注入实现了控制反转的思想。
依赖注入:
指Spring创建对象的过程中,将对象依赖属性通过配置进行注入依赖注入常见的实现方式包括两种:
第一种: set注入
第二种:构造注入工
所以结论是:IOC就是一种控制反转的思想,而DI是对loC的一种具体实现。
2. 面向切面编程(AOP:Aspect Oriented Programming)
AOP
目标
让我们专注于业务功能处理
AOP
原理
将复杂的需求分解出不同方面,将不同对象、不同模块之间的共同业务集中解决
通过动态代理的方式,把抽离出来的共性代码
"
织入
"
到业务代码中,实现对原有代码的增强处理
AOP相关术语
Aspect
(切面)
Advice
(增强处理)
Pointcut
(切入点)
Join Point
(连接点)
Target Object
(目标对象)
AOP proxy
(
AOP
代理)
Weaving
(织入)
@Aspect
public class MyAspect {
@Before("execution(* com.example.service..*.*(..)))")
public void before(){
System.out.println("前置通知.... 在方法之前要執行的公共代码放在这里");
}
/**
* 后置通知
* returnVal,切点方法执行后的返回值
*/
@AfterReturning(value="execution(* com.example.service..*.*(..)))",returning = "returnVal")
public void AfterReturning(Object returnVal){
System.out.println("后置通知...."+returnVal
);
}
/**
* 环绕通知
* @param joinPoint 可用于执行切点的类
* 具体什么业务
* @return
* @throws Throwable
*/
@Around("execution(* com.example.service..*.*(..))")
public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("环绕通知前....");
Object obj= (Object) joinPoint.proceed();
System.out.println("环绕通知后....");
return obj;
}
/**
* 抛出通知
* @param e
*/
@AfterThrowing(value="execution(* com.example.service..*.*(..))",throwing = "e")
public void afterThrowable(Throwable e){
System.out.println("出现异常:msg="+e.getMessage());
}
/**
* 无论什么情况下都会执行的方法
*/
@After(value="execution(* com.example.service..*.*(..))")
public void after(){
//方法的对象的关闭
//方法的回滚
System.out.println("最终通知....");
}
}
Spring在同一个功能上提供了注解和配置文件两种实现方式以供选择
通常情况下,优先选择注解来简化配置工作量
常用的注解
@AfterThrowing
@Before
@AfterReturning
@Around
@After
Aspect
@Pointcut