课程咨询 :186 8716 1620      qq:2066486918

昆明Java培训 > 达内新闻 > java培训:简单的Spring AOP注解的使用
  • java培训:简单的Spring AOP注解的使用

    发布:昆明Java培训      来源:达内新闻      时间:2016-10-21

  • 昆明Java培训机构的老师今天给大家讲Spring AOP注解的使用。

    1.首先创建一个简单的Student类

    2.创建一个简单的aspect切面class,并加上@注解配置。

    @Aspect  //表示是一个aspect切面class,注解以后可以被Spring扫描到

    public class Logging {

    @Pointcut("execution(* com.seeyon.SpringBean.aop.Student.get*(..))") //定义切点

    public void getMethod(){}; //切点方法,方法名称相当于ID,方法名称随便取

    /**

    * This is the method which I would like to execute

    * before a selected method execution.

    */

    @Before("getMethod()")  //切点方法执行之前执行@Before

    public void beforeAdvice() {

    System.out.println("Going to setup student profile.");

    }

    /**

    * This is the method which I would like to execute

    * after a selected method execution.

    */

    @After("getMethod()")  //切点方法执行之后执行@After

    public void afterAdvice() {

    System.out.println("Student profile has been setup.");

    }

    /**

    * This is the method which I would like to execute

    * when any method returns.

    */

    @AfterReturning(pointcut = "getMethod()",returning = "retVal")//切点方法返回值完成后执行@AfterReturning

    public void afterReturningAdvice(Object retVal) {

    System.out.println("Returning:" + retVal.toString());

    }

    /**

    * This is the method which I would like to execute

    * if there is an exception raised.

    */

    @AfterThrowing(pointcut = "getMethod()",throwing = "ex")//切点方法抛出异常之后执行@AfterThrowing

    public void AfterThrowingAdvice(IllegalArgumentException ex) {

    System.out.println("There has been an exception: " + ex.toString());

    }

    }

    3.SpringAOP.xml配置

    <bean id="student" class="com.seeyon.SpringBean.aop.Student" p:name="yangyu" p:age="27"></bean>

    <bean id="logging" class="com.seeyon.SpringBean.aop.Logging"></bean>

    <!--注解方式配置Spring AOP,Spring会自动到已注册的bean中去寻找@Aspect注解标记的class-->

    <aop:aspectj-autoproxy/>

    4.mian方法

    public class test {

    public static void main(String[] args) {

    ApplicationContext context =

    new ClassPathXmlApplicationContext("SpringAop.xml");

    Student student = (Student) context.getBean("student");

    student.getName();

    //       student.getAge();

    //       student.printThrowException();

    }

    }

    5.输出结果

    Going to setup student profile.

    Name : yangyu

    Student profile has been setup.

    Returning:yangyu

    注意事项:

    <aop:config proxy-target-class="true">

    </aop:config>

    <aop:aspectj-autoproxy proxy-target-class="true"/>

    1.如果不设置proxy-target-class属性或者设置成false:

    (1)代理类实现了接口,那么AOP实际上是使用的JDK的自动代理,代理的接口。

    (2)代理类没有接口,那么还是使用的CGLib进行代理。

    2.如果将proxy-target-class属性设置成true,那么将始终使用CGLib进行代理。

    JDK动态代理与CGLib动态区别:

    1、JDK动态代理:JDK的动态代理依靠接口实现,如果有些类并没有实现接口,则不能使用JDK代理,这就要使用cglib动态代理了。

    2、CGLib动态代理:cglib是针对类来实现代理的,他的原理是对指定的目标类生成一个子类,并覆盖其中方法实现增强,但因为采用的是继承,所以不能对final修饰的类进行代理。

    昆明Java培训机构的老师可以得出一个结论:CGLib可以代理任何的类。

    那为什么还要用JDK的动态代理呢?肯定您会这样问:

    根据多年来实际项目经验得知:CGLib创建代理的速度比较慢,但创建代理后运行的速度却非常快,而JDK动态代理正好相反。如果在运行的时候不断地用CGLib去创建代理,系统的性能会大打折扣,所以建议一般在系统初始化的时候 CGLib去创建代理,并放入Spring的ApplicationContext中以备后用。

    推荐文章

上一篇:Java:简单的通过XML的AOP配置

下一篇:简单的通过AOP进行事务管理

最新开班日期  |  更多

Java--零基础全日制班

Java--零基础全日制班

开班日期:11/30

Java--零基础业余班

Java--零基础业余班

开班日期:11/30

Java--周末提升班

Java--周末提升班

开班日期:11/30

Java--零基础周末班

Java--零基础周末班

开班日期:11/30

  • 网址:http://km .java.tedu.cn      地址:昆明市官渡区春城路62号证券大厦附楼6楼
  • 课程培训电话:186 8716 1620      qq:2066486918    全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56