Spring的bean管理(二)
一、Spring的bean管理
1. Spring注解创建对象
①导入jar包

②导入约束

③开启注解扫描
扫描包里的类,方法, 属性上面是否有注解

ps:只扫描属性上面的注解

④创建类,配置注解创建User类的对象user
value中的user类似于xml配置文件中的id(user)

⑤ 测试注解配置

ps: Spring中提供@Component的三个衍生注解(功能目前是一致的)
@Component:
@Controller: WEB层
@Service:业务层
@Repository: 持久层
2. 注解注入属性
① 通过注解创建UserDao
使用注解不需要setter getter方法

② 创建UserService对象

③ 在UserDao属性上配置注解@Autowird,根据类名UserDao找到类UserDao,再进行注入,和UserDao类中value的值没有关系。

④ 第二种配置方法
Resource中的name和UserDao中value的值必须一致,类似于xml文件中的id。


ps: 注解方式和xml配置文件的混合使用。
创建基本类的对象使用xml文件配置
在UserService对象中注入UserDao对象使用注解的方式
二、AOP
面向切面编程,扩展功能不通过修改源代码实现
1. 需要对方法进行增强的原始方法

2. 纵向抽取机制
对需要增强的方法放置一个父类中,继承父类,需要扩展方法的调用父类的方法

3. 横向抽取机制
有接口的情况

没有接口的情况

4. Aop操作术语
① 连接点:类里面哪些方法可以被增强,这些方法被称为连接点。
② 切入点: 在类中有许多方法可以被增强,实际操作中只增强了类里面add方法和update方法,实际增强的方法称为切入点。
③ 通知/增强: 比如扩展日志功能,这个日志功能称为增强
- 前置通知:在需要增强的方法之前执行
- 后置通知:在需要增强的方法之后执行
- 异常通知:在方法出现异常时执行
- 最终通知:在后置通知之后执行
- 环绕通知:在方法执行之前和之后执行
④ 切面: 把增强应用到具体方法上面,过程称为切面。
5. String的AOP操作
① 在Spring里面进行aop操作,使用aspectj实现
② aspectj不是Spring的一部分,和Spring一起使用进行aop操作
③ Spring 2.0 以后新增了对AspectJ支持。
6. 使用aspectJ实现aop有两种方式
①基于aspectj的xml配置
- 导入jar包,导入aop包
- 导入aop约束

- 使用表达式配置切点
切入点:实际增强的方法
常用的表达式格式: execution(<访问修饰符>?<返回类型><方法名>(<参数>)<异常>)
execution(* cn.itcast.aop.Book.add(...)) 只增强add方法
execution(* cn.itcast.aop.Book.*(...)) 增强该类中的所有方法
execution(* *.*(...)) 所有类中的所有方法都增强
execution(* save*(...)) 匹配所有save开头的方法增强
测试:
创建被增强方法的类Book

创建含增强方法的类MyBook

配置xml文件bean3.xml
切点:被增强方法的路径,可以是一个类中的某一个方法,一个类中的所有方法,所有类中的方法等等

配置切面
切面:配置增强方式,pointcut-ref需要和切点中的id对应

测试

环绕通知
创建MyBook类中的增强方法的类

xml中配置
method对应MyBook中的增强方法的方法名


三、Spring的aop操作(基于aspectj的xml方式)
基于aspectj的注解方式
创建对象

开启aop自动代理




浙公网安备 33010602011771号