IOC(DI), AOP 笔记
几个名词的简称:IOC(Inversion Of Control), DI(Dependency Injection), AOP(Aspect Orient Program), POJO(Persistent Of Java Object), DAO(Data Access Objectd)
什么是IOC(ID), 有什么好处:1. 把自己new的东西改为由容器提供(初始化具体值,装配);2. 好处是灵活装配
注解:@Autowired: 自动装配;@Qulifier: 声明唯一使用特定Bean,当自动装配时Bean不唯一时可使用;Component, Respository, Service, Controller: 自动扫描时使用,当有此标签时,会自动装配,这四个注解在2.5上面没有任何区别;Resource: 默认按名称进行装配,若需要按名称进行装配则为@Resource("userDAO"),按类型进行装配,需要在xml文件里进行声明;Scope("prototype"): 单例(singlton), 实例(prototype);@PostContrustruct, @PreDestroy:相当于init和destroy.
最简单的AOP实现只需涉及3个概念:
目标(Target) | 通知(Advice) | 代理(Proxy) |
真正需要被代理的类,一般它会实现至少一个类 | 当目标的调用方法时需要调用的代码,也叫拦截器 | 加入了通知的目标,它可以作为目标的替身出现 |
BeforeAdvice: 在目标类执行前执行
AroundAdvice: 在目标类执行中执行
AfterAdvice: 后执行
ThrowableAdvice: 异常类执行
假设我现在要在目标类前加入某个验证,我只需要添加一个BeforeAdvice类,就可以实现,这就是AOP。
@Aspect: 切面注入类
@Before: 在某些类/方法之前执行,参数格式为(public void com.garin.UserService.save(User u))
概念:JoinPoint: 连接点
PointCut: 切入点的集合即JoinPoint的集合, 语法@PointCut("ececution (* com.garinzhang.*.*(...))")
Aspect: 切面(类加上去的逻辑,切面类):
Advice: 加在切面类上
Target: 被代理对象,把业务逻辑到哪些方法上。