*其实这些知识点网上很容易找到,这里只是体系化总结,让你对知识有整体结构化认知*
IOC概念 : Inversion of Control
“控制反转”,也叫依赖注入(Dependency Injection,DI),其含义相同,从不同角度描述。
控制权由程序代码移到Spring容器中,控制权发生反转,这就是IOC思想。
装载
常用注解:
@Component 泛化的概念,表示 一个组件bean,可作用在任何层次;
@Repository 数据访问层(DAO层)的类标识为 Spring 中的 Bean,其功能与 @Component 相同;
@Service 业务层(Service 层)标识, 其功能与 @Component 相同;
@Controller 控制层, 其功能与 @Component 相同;
@Autowired 可标识构造函数、属性的set方法、属性变量,配合注解器完成bean装载,默认按类型装配;
@Resource 有type、name属性,默认按name装配;
@Qualifier 与autowired配合,bean的实例名由其参数指定;
AOP概念: Aspect Oriented Programming
-
一种编程模式,如OOP面向对象编程。能有效减少重复代码,达到松耦合目的;
-
目前最流行的 AOP 框架有两个,分别为 Spring AOP 和 AspectJ;
-
一些术语
Joinpoint(连接点) 指那些被拦截到的点,在 Spring 中,可以被动态代理拦截目标类的方法。
Pointcut(切入点) 指要对哪些 Joinpoint 进行拦截,即被拦截的连接点。
Advice(通知) 指拦截到 Joinpoint 之后要做的事情,即对切入点增强的内容。
Target(目标) 指代理的目标对象。
Weaving(植入) 指把增强代码应用到目标上,生成代理对象的过程。
Proxy(代理) 指生成的代理对象。
Aspect(切面) 切入点和通知的结合。 -
Spring JDK动态代理
通过java.lang.reflect.Proxy 类实现(方法前方法后拦截) -
Spring CGLlB动态代理
CGLIB(Code Generation Library)是一个高性能开源的代码生成包,它被许多 AOP 框架所使用,其底层是通过使用一个小而快的字节码处理框架 ASM(Java 字节码操控框架)转换字节码并生成新的类; -
Spring使用AspectJ开发AOP
@Aspect 用于定义一个切面。
@Before 用于定义前置通知,相当于 BeforeAdvice。
@AfterReturning 用于定义后置通知,相当于 AfterReturningAdvice。
@Around 用于定义环绕通知,相当于MethodInterceptor。
@AfterThrowing 用于定义抛出通知,相当于ThrowAdvice。
@After 用于定义最终final通知,不管是否异常,该通知都会执行。
@DeclareParents 用于定义引介通知,相当于IntroductionInterceptor(不要求掌握)。