- 1.1.1注解
- @Component
- 组件id:value指定,如果没有指定默认首字母小写
前提:容器中的组件里,才能使用注入功能的注解
- 1.2.1 直接注入
- 1.2.2 配置文件;注入注解:#{配置文件的key}
- 1.2.2.1 使用SPEL表达式
按照类型取出组件
此时可以用Qualufier注解
Reource(按照类型注入,如果加上name指定id注入)
1.3scope与生命周期 修改组件作用域 生命周期 测试类注入功能测试
- 1.导入spring-test依赖
- 2.两个注解
(底层就是动态代理,用切面表达式来针对性的AOP)
对某一个方法或者全部方法做增强,而后置处理器是全部方法
2.1核心术语连接点-->拿到增强过程中的值(比如:委托类对象.method,args)
1.工厂类实现aop(会被spring代理工厂取代(了解))
将一个类注册多次
通用的工厂类来动态代理,方法增强
(xml文件写个ProxyFactorBean,然后写俩属性)
1.让spring帮忙写了一个工厂类
2.实现接口MethodInterceptor(添加到容器中)
3.属性注入
3.2. AspectJ提供切入点,通知
- 3.2.1切入点
- 切入点表达式
- execution
- 对方法进行完整描述
- execution(修饰符 返回值 包名.类名.方法名(形参))
- 语法规律:省略,能否通配
- 修饰符:可以省略,代表任意修饰符
- 返回值:不可省略,可以用*通配,如果返回值是javabean要用全限定类名(全类名中也可以使用*)
- 包名类名方法名:可以部分省略,使用..来进行省略,也可以用*通配
- 包名的第一级不能省略
- 方法名不能省略
-
形参:省略代表无参方法
-
可以通配
-
*单个任意类型的参数
-
..任意常数
-
特殊用法:javaBean要写全限定类名
-
-
- @annotation
- (注解只是灵活的改变切面点而已)
- 通过自定义注解来指定方法
- 需要写一个自定义注解
1.ref也改
- 3.2.2 Advisor(通知器)
- 侧重自定义(也就是其实都可以被切面替代)
-
- 0.引入依赖aspectjweaver,引入groupid带org的这个
1.写标签 :表达式:表明切入点,引入通知
2.写增强逻辑(写通知)(这一步和工厂代理是一致的)
- 3.2.3. Aspect
- 已有的通知
- 根据不同的时间提供不同的通知
1.service类组件
2.在切面中使用通知
3.写一个切面类并且注册在容器中
这aop标签加上ref指定切面组件,通知标签写上组件内的方法
返回的结果
抛出异常,after也会执行
总结一下: 1.工厂类(1.bean实现工厂的委托标签,和两个propeties标签(指向方法(该方法要实现MethodInterceptor接口))) 2.注解(注解就是个切面表达式而已,记得格式就行)3.通知器advisor
一个方法实现MethodInterceptor,里面配置通知器(和切面比都有一定局限,因为切面的选择更多) 4.4.切面Aspect (思考,一个aop需要的是切入点与切入点表达式 + 通知方法(方法应该绑定切入点))
一个类,写切面方法
配置文件直接指向 5.☆☆☆注解切面 一个aop需要的是切入点与切入点表达式 + 通知方法(方法应该绑定切入点))
一个类,写切面方法
1.开注解
2.一个类(加入容器标签,切面标签)
3.@pointcut(配置切入点,切入点表达式,方法名就是id)
4.写方法,写对应的标签(需要什么直接这形参里取)
拦截记得放行
不放行就没值了
4.2.4使用注解使用AspectJAspect的实现形式,我们这切面类配置通知方法的形式
- 切入点以及表达式
- 指定切面组件
- 把切面组件的方法指定为对应的通知方法
- 通知方法绑定对应切入点
1.打开注解开关
2. 对切面组件注解
3.切入点以方法的形式的存在(id是方法名,value后面是切入点表达式)
4.为方法指定通知方式
5.通知方法绑定切入点(利用通知注解的value属性)
5.Aspect的连接点JoinPoint
可以拿到增强过程中的值
- 代理对象 getThis
- Method对象 getSignature
- 形参getArgs
- 委托类对象getTarget



