LoadTimeWeaver是用

LoadTimeWeaver是用

  1.当我们在使用Sping AOP 的时候我们的目标类和切面都需要向Spring容器中注册,否则我们无法实现AOP,应为Spring使用都是代理模式

    JDK动态代理和CGLIb的动态代理,都需要目标类。我们可以想,我们不用向Spring容器中注册,怎么实现AOP,我们可以在类加载的时候实现

    修改字节码来,来把需要的方法注册进去,从而我们new的对象都是经过代理之后的

  2.如何实现?? 我们通过修改JVM的参数来实现

     我的事务切面,逻辑上的,只起个示范作用

    

package liusheng.aspect;

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

@Aspect
public class TransactionAspect {
    @Before("execution(* liusheng.dao.UserDao.*(..))")
    public void start(){
        System.out.println("开启事务");
    }
    @After("execution(* liusheng.dao.UserDao.*(..))")
    public void end(){
        System.out.println("关闭事务");
    }
}

   我的dao类 (也是起个示范作用)

  

package liusheng.dao;

public class UserDao {
    public void add(){
        System.out.println("添加对象");
    }
    public void delete(){
        System.out.println("删除对象");
    }
}

  我的测试类

  

package liusheng.test;


import liusheng.dao.UserDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UserTest {
    public static  void main(String[] args){
        UserDao dao=new UserDao();
        dao.add();
        dao.delete();
    }
}

  我们需要一个aspectjweaver.jar包(一般配置都有)

  然后我们需要一个配置aop的XML文件,如下

  

<!DOCTYPE aspectj PUBLIC "-//AspectJ//DTD//EN"
        "http://www.eclipse.org/aspectj/dtd/aspectj.dtd">
<aspectj>
    <weaver>
        <!--必须把目标类和切面类都配置进去-->
        <include within="liusheng.dao.UserDao"/>
        <include within="liusheng.aspect.TransactionAspect"/>
    </weaver>
    <aspects>
        <!--切面类-->
        <aspect name="liusheng.aspect.TransactionAspect"/>
    </aspects>
</aspectj>

  配置jvm的参数是  -javaagent:C:\Users\刘升\.m2\repository\org\aspectj\aspectjweaver\1.8.3\aspectjweaver-1.8.3.jar

  注意::C:\Users\刘升\.m2\repository\org\aspectj\aspectjweaver\1.8.3\aspectjweaver-1.8.3.jar这个是我的包的绝对路径

   结果

  

  我刚刚入门,可以能有错误的地方,请多指点指点,还有我能力有限,不能解释这个实现的原理。

 

  

  

    

      

    

      

posted on 2018-03-20 00:24  学习spring是我必须的  阅读(242)  评论(0编辑  收藏  举报