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自动代理

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2020-12-27 17:12  医生Doctor  阅读(49)  评论(0)    收藏  举报