IOC/DI
IOC(控制反转):对象(组件)的创建由代码中转移到外部容器(XML,注解) .
DI(依赖注入):当类A需要使用类B时,那么我们需要为类A的属性赋值类B的对象.
这种现象我们称为依赖注入.
注意:IOC/DI指的是同一个东西,理解的角度不一样.
补充:组件化思想:分离关注点,使用接口,不再关注实现.
AOP(面向切面编程)
AOP:是一种通过预编译和运行期动态代理的方式实现在
不修改源代码的情况下给程序动态添加功能的技术.
原理:
a.将复杂的需求分解出不同方面,将散布在系统中的公共功能集中解决.
b.采用代理机制组装起来运行,在不改变原程序的基础上对
代码段进行增强处理,增加新的功能.
术语:
增强处理(Advice)
前置增强
后置增强
环绕增强、异常抛出增强、最终增强等类型.
切入点(Pointcut)
连接点(Join Point)
切面(Aspect):切入点+增强处理.
目标对象(Target object)
AOP代理(AOP proxy)
织入(Weaving)
开发步骤:
第一步:写增强功能
第二步:配置核心文件
<!-- 注册增强类 -->
<bean id="tp" class="增强类">
<!-- 配置切面-->
<aop:config>
<!-- 配置切入点-->
<aop:pointcut id="名称" expression="
execution(匹配类和方法的表达式)
"/>
<!-- 配置切面-->
<aop:aspect ref="增强类的id">
<!-- 切面的增强方法和切入点 -->
<aop:before method="增强方法" pointcut-ref="切入点的id" />
</aop:aspect>
</aop:config>
第三步:测试
匹配表达式
public * addUser(entity.User) //"*":任意返回值类型.
public void *(entity.User) //"*":任意方法名
public void addUser(..) //"..":任意个任意类型的参数
* com.service.*.*(..) //com.service包下的所有直接子类的所有方法.
* com.service..*.*(..) //com.service包及其所有子包的所有类的所有方法.