Spring学习(二 IOC注解和AOP)

一  IOC注解开发

使用配置文件属性注入时,用的是bean约束

使用注解属性注入时,需要引入context约束

用法

注释类   

@Component

    @Controller    (web层)

    @Service        (service层)

    @Repository   (Dao层)

注释属性

普通属性    @Value("...")

对象属性    @Resource(name="...")  等价于下面

@Autowired    是按对象类别注入,我们习惯按Id属性注入,所以必须在下面加上

@Qualifier("...")

其他注解

生命周期相关

@PostConstruct   相当于init-method

@PreDestroy        相当于destroy-method

作用范围相关

@Scope("...")

    singleton    (默认)

    prototype

    request

    session

    globalsession

在XML配置文件中,配置组件扫描

base-package中表示的是哪些包下的类可以使用注解,并且可以使用通配符

注意:

只有当用注释替代在配置文件中注册类 情况下,才需要配置扫描组件.

当用注释替代在配置文件中属性注入时or,并不需要配置扫描组件

属性注入方式

当有注入属性有set方法时,需要将注解写在set方法上,(亲测写在属性上也行...)

当没有set方法时,将注解写在属性上方

XML注入和注解注入的比较

XML   (结构清晰,维护方便)

可以适用于任何场景 

注解    (开发方便)

在有些情况下用不了,这个类是别人提供的,无法在类里添加注解  



二  AOP  (aspect oriented programming)

Spring底层的AOP实现原理

动态代理

    JDK动态代理        只能对实现了接口的类产生动态代理

    Cglib动态代理(第三方技术) 对没有接口的类,采用生成子类的方式,完成动态代理

Spring的AOP开发 (AspectJ 的XML方式)

相关术语

Joinpoint  连接点,可以被拦截(增强)的方法

Pointcut   切入点,被拦截(增强)的方法

Advice(方法层面的增强)    通知,增强     e.g.权限校验,日志记录等

Introduction(类层面的增强)   引介       加个属性,加个方法

Target    目标       被增强的对象

Weaving     织入    将Advice应用到Target的过程

Proxy         代理

Aspect        切面    多个通知和切入点的组合

Spring的Junit测试

在测试类前加上

@RunWith(SpringJunit4ClassRunner.class)

@ContextConfiguration("classpath:xxx.xxx.applicationContext.xml")

就可以使用注解注入的方式,传入对象了

AOP的XML开发

创建一个类,并在其中编写所要增强的方法

将这个类交给Spring     

将要增强的对象交给Spring     

通过对AOP配置完成对目标的代理

   

       

   

   

       

   

通知的类型


前置通知 

通过在切面方法中加入参数 (JoinPoint joinPoint),可以获取到其对应的切入点在哪里(每种通知都可以)


后置通知 

在配置中     returning="result" />

并在切面方法中加入参数 (Object result),就可以拿到切点的返回值


环绕通知 

在切面方法中加入参数 (ProceedingJoinPoint   joinPoint)

环绕前方法

Object object = joinPoint.proceed();   //相当于执行切入点方法,有可能会有返回值

环绕后方法

return  object;


异常抛出通知 

在配置中     throwing="ex" />

并在切面方法中加入参数    (Throwable  ex)    

这里的ex就记录的异常信息


最终通知 

无论增强的切入点内有没有异常,切面方法都会执行,相当于finally里的代码


Spring切入点表达式的写法

基于execution函数

语法    [访问修饰符]  返回值  包名.类名.方法名(参数)

*  任意

..    当前包及其子包


                                                                           努力生活,自得其乐       ——   2019.03.24

你可能感兴趣的:(Spring学习(二 IOC注解和AOP))