昆明java培训
达内昆明广州春城路

18487146383

热门课程

java培训:简单的Spring AOP注解的使用

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

昆明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未来的发展走向

昆明java培训机构:java学完可以干什么!

昆明java培训机构:如何搞定BAT和华为offer?有这份攻略就够了!

昆明java培训机构:学Java别担心枯燥和无聊

选择城市和中心
贵州省

广西省

海南省

扫一扫

了解更多干货