## 使用LTW(LoadTimeWeaving)技术实现AOP功能
### aop增强分类
###### 编译时:
使用特殊的编译器在编译期将切面织入目标类,这种比较少见,因为需要特殊的编译器的支持。例如,AspectJ编译	器,很少有到,目前我还没有用到。
###### 加载时:
通过字节码编辑技术在类加载期将切面织入目标类中,它的核心思想是:在目标类的class文件被JVM加	载前,通过自定义类加载器或者类文件转换器将横切逻辑织入到目标类的class文件中,然后将修改后class文件交给JVM加载	这种织入方式可以简称为LTW(LoadTimeWeaving),AspectJ的LoadTimeWeaving (LTW)
###### 运行时:
运行期通过为目标类生成动态代理的方式实现AOP就属于运行期织入,这也是Spring AOP中的默认实现,并且提供了两种创建动态代理的方式:JDK自带的针对接口的动态代理和使用CGLib动态创建子类的方式创建动态代理。
### 优劣势
编译时:需要特殊的编译器
加载时:需要特殊的类加载器 
运行时:功能有限
### 使用LTW 切面第三方JAR 包(普通maven项目)
#### 配置文件
##### pom 文件
```xml
    4.0.0
    
        cn.x47.blog
        LoadTimeWeaving-demo
        1.0
    
    java-aspectj-agent
    1.0
    jar
    
        
            com.alibaba
            fastjson
        
        
            org.aspectj
            aspectjweaver
        
    
    
        
            
                maven-compiler-plugin
                2.3.2
                
                    1.8
                    1.8
                
            
            
                maven-assembly-plugin
                
                    
                        jar-with-dependencies
                    
                    
                        
                            cn.x47.ltw.Main
                        
                    
                
                
                    
                        make-assembly
                        package
                        
                            single
                        
                    
                
            
        
    
```
##### aop.xml 
 放在`META-INF/aop.xml`
```xml
    
        
        
        
    
    
        
        
    
```
### 目录结构

### 执行方法
##### 开发环境
可以通过添加jvm参数的方式来启动

### springboot  使用 LTW切面第三方JAR包
#### 配置文件
##### pom配置
```xml
    4.0.0
    
        cn.x47.blog
        LoadTimeWeaving-demo
        1.0
    
    springboot-aspectj-agent
    1.0
    
        
            org.springframework.boot
            spring-boot-starter
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            com.alibaba
            fastjson
            2.0.12
        
        
            org.springframework.boot
            spring-boot-starter-aop
        
        
            org.aspectj
            aspectjweaver
            1.9.9
        
        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    
    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    
```
##### oop配置
```xml
    
        
        
        
    
    
        
        
    
```
####  目录结构

### 源码地址
https://git.dr1997.com/blog/LoadTimeWeaving-demo