有接口的默认是JDK的动态代理,没有接口的是cglib代理
没有接口spring自动应用cglib
package org.example;JDK
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class Hello {
@Value("yasuo")
private String name;
public String sayHello(String name){
System.out.println(name+":pasaki");
return name;
}
}
package org.example;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
@Aspect
public class MyAspect {
@Pointcut("execution(public String org.example.Hello.sayHello(String))\"")
public void cut(){
}
@After(value = "cut()")
public void after(){
System.out.println("最终通知");
}
@Before(value = "cut()")
public void before(){
System.out.println("前置通知");
}
}
@Test
public void shouldAnswerWithTrue()
{
//1、指定spring配置文件的名称
String config="spring_total" + ".xml";
//2、创建表示spring容器的对象,ApplicationContext
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(config);
//3、通过容器获取对象
Hello hello =(Hello)context.getBean("hello");
String result=hello.sayHello("yasuo");
System.out.println(result);
}
有接口应用cglib代理
在spring 配置文件中
<aop:aspectj-autoproxy proxy-target-class="true"/>