Spring知识点回顾

SpringIOC(控制反转)

在没有IOC之前

对象A依赖对象B,我们需要自己手动创建B对象,控制权在我们手中

引入IOC

我们将控制权交给IOC容器,在需要用到B对象时,IOC会主动创建一个对象B注入到对象A所需要的地方

依赖注入3种方法

就是由IoC容器在运行期间,动态地将某种依赖关系注入到对象之中

  1. Setter注入,前提是注入参数要有对应的set方法
  2. 构造函数注入,多个参数的构造器在xml配置时参数顺序不重要,spring自动识别
  3. 自动装配与注解注入

Spring的自动装配有三种模式:byTpye(根据类型),byName(根据名称)、constructor(根据构造函数)

基于@Autowired的注解注入默认采用byTpye模式,如果需要按名称(byName)匹配的话,可以使用@Qualifier注解与@Autowired结合,使用注解时必须启动注解驱动<context:annotation-config />

优点

  1. 可复用性好
  2. 不用自己组装,拿来就用。
  3. 享受单例的好处,效率高,不浪费空间。
  4. 系统的可扩展与代码的易维护

SpringAop

重要术语

  • Aspect(切面)
  • advice(增强)

    @after @before @Around @AfterReturning @AfterThrowing

  • 连接点(join point)

    程序运行中的一些时间点, 例如一个方法的执行, 或者是一个异常的处理

    常用方法:

    • Signature getSignature(); 获取封装了署名信息的对象,在该对象中可以获取到目标方法名,所属类的Class等信息
    • Object[] getArgs(); 获取传入目标方法的参数对象
    • Object getTarget(); 获取被代理的对象
    • Object getThis(); 获取代理对象
  • 切点(point cut)

    - `@Pointcut("execution(* com.ssm.controller..*.*(..))")`
    
    execution是切点标志符,第一个*表示所有类型的返回,`..*`表示controller包下所有类,`.*`表示所有的方法,`(..)`表示任意参数
    
    - `execution(public int com.xys.service.*(String name, ..))`
    
    匹配指定包中的所有 public 方法, 并且第一个参数是 String, 返回值是 int 类型的方法
    
  • AOP proxy

    Spring AOP 默认使用标准的 JDK 动态代理,设置proxyTargetClass = true则使用CGLIB 代理

  • 织入(Weaving)

拦截器

自定义拦截器需要实现HandlerInterceptor接口

1
2
3
4
5
6
7
8
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 登陆拦截,这里用了自定义的工具类
if (RoleContext.getContextRole() == null){
response.sendRedirect("index.jsp");
return false;
}
return true;
}
赏个🍗吧
0%