本文演示的是Spring中使用AspectJ注解和XML配置两种方式实现AOP
下面是使用AspectJ注解实现AOP的Java Project
首先是位于classpath下的applicationContext.xml文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://.jadyer.cglib; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * @see -------------------------------------------------------------------------------------------------- * @see JDK动态代理和CGLIB代理的差别 * @see 1..JDK动态代理对实现了接口的类进行代理 * @see 2..CGLIB代理可以对类代理,主要对指定的类生成一个子类。由于是继承,所以目标类最好不要使用final声明 * @see -------------------------------------------------------------------------------------------------- * @see 代理方式的选择 * @see 1..如果目标对象实现了接口,默认情况下会采用JDK动态代理实现AOP,亦可强制使用CGLIB生成代理实现AOP * @see 2..如果目标对象未实现接口,那么必须引入CGLIB,这时Spring会在JDK动态代理和CGLIB代理之间自动切换 * @see 3..比较鼓励业务对象是针对接口编程的,所以鼓励使用JDK动态代理。因为我们所代理的目标,一般都是业务对象 * @see -------------------------------------------------------------------------------------------------- * @see 使用CGLIG代理的步骤 * @see 1..新增CGLIB库:SPRING_HOME//lib//cglib//*.jar * @see 2..新增配置标签,强制使用CGLIB代理<aop:aspectj-autoproxy proxy-target-class="true"/> * @see -------------------------------------------------------------------------------------------------- */ public class Client { public static void main(String[] args) { ApplicationContext factory = new ClassPathXmlApplicationContext("applicationContext-cglib.xml"); //当UserManagerImpl实现了UserManager接口的情况下,这时Spring会自动使用JDK动态代理 //如果项目已经引入cglib库,并在配置文件中强制使用CGLIB代理,此时Spring才会使用CGLIB代理 //UserManager userManager = (UserManager)factory.getBean("userManager"); //由于此时的UserManagerImpl并没有实现UserManager接口,所以接收类型就不能再使用UserManager接口 //并且项目中已经引入了cglib库,尽管配置文件中没有强制使用CGLIB代理,但Spring会自动使用CGLIB代理 UserManagerImpl userManager = (UserManagerImpl)factory.getBean("userManager"); userManager.addUser("吴三省", "02200059"); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。