参考:http://dyygusi.iteye.com/blog/1997231
参考:http://550516671-qq-com.iteye.com/blog/833816
代理类:
package spring.mock; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; public class MockSpringAOP implements InvocationHandler { private Object target; public MockSpringAOP(Object obj) { this.target = obj; } public void setTarget(Object target) { this.target = target; } public void before() { System.out.println("这是一个前置通知"); } public void afterReturning() { System.out.println("这是一个后置通知"); } public void afterThrowing() { System.out.println("这是一个异常通知"); } public void after() { System.out.println("这是一个最终通知"); } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object returnVal = null; try { before(); returnVal = method.invoke(target, args); afterReturning(); } catch (Exception e) { afterThrowing(); } finally { after(); } return returnVal; } }
代理对象
package spring.mock; public class User { Integer id; String name; String pwd; public User() { } public User(int id, String name, String pwd) { this.id = id; this.name = name; this.pwd = pwd; } } package spring.mock; public interface UserDAO { public void addUser(User user); } package spring.mock; public class UserDAOImpl implements UserDAO { @Override public void addUser(User user) { System.out.println("保存User到数据库中"); throw new RuntimeException(); } }
测试
package spring.mock; import java.lang.reflect.Proxy; public class Test { public static void main(String[] args) { UserDAO userDao = new UserDAOImpl(); MockSpringAOP interceptor = new MockSpringAOP(userDao); // 通过代理的静态方法创建一个代理对象 // 这个代理创建的时候,接收了接口类型和拦截器的处理类,在代理的背后,他会调运拦截器的invoke这个方法。 // 因为传递的有接口类型,所以可以强制类型转换到我们指定的接口类型 UserDAO userDaoProxy = (UserDAO) Proxy.newProxyInstance(interceptor.getClass().getClassLoader(), userDao.getClass().getInterfaces(), interceptor); // 然后在代理对象处理的时候,就会将我的逻辑织如到被代理的对象上 userDaoProxy.addUser(new User(1, "a", "b")); } }
相关推荐
我这里是 usr/local/jdk/ 2)输入命令 chmod 777 jdk1.8.0_221/bin/java修改权限 3)再次输入 java -version 成功 总结 以上所述是小编给大家介绍的解决-BASH: /HOME/JAVA/JDK1.8.0_221/BIN/JAVA: 权限不够问题,...
配置环境变量,vi /etc/profile,在文件最后添加配置 JAVA_HOME=/usr/local/java/jdk1.8.0_231/ JRE_HOME=/usr/local/java/jdk1.8.0_231/jre CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_...
linux(x86_64)下的jdk压缩包,版本为 1.8.0_333。附带安装教程。 1、将jdk压缩包解压到指定目录(如:/usr/local/java) 2、添加环境变量(sudo vi ~/.bashrc) export JAVA_HOME=/usr/local/java/jdk1.8.0_333 ...
基于JDK的动态代理。必须是面向接口的,只有实现了具体接口的类才能生成代理对象
-bash: /usr/local/jdk/jdk1.8.0_181/bin/java: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory 安装完后 java -version 查看版本出现: 原因是:没有那个文件或目录,找了很久发现需要...
Jdk动态代理,基于接口的代理示例 InovactionHandler Proxy
spring之AOP(动态代理),包括jdk动态代理和CGLib动态代理
linux(x86_64)下的jdk压缩包,版本为 1.7.0_79。附带安装教程。 1、将jdk压缩包解压到指定目录(如:/usr/local/java) 2、添加环境变量(sudo vi ~/.bashrc) export JAVA_HOME=/usr/local/java/jdk1.7.0_79 ...
1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP 2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP 3、如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间...
spring aop jdk 动态代理的底层实现解析模拟
JAVA_HOME=/home/jdk1.6.0_03 PATH=$PATH:%JAVA_HOME%/bin CLASSPATH=.:%JAVA_HOME%/jdk1.6.0_03/jre/lib/rt.jar:%JAVA_HOME%lib/dt.jar:%JAVA_HOME%/lib/tools.jar Export JAVA_HOME PATH CLASSPATH 安装过程中...
Spring-AOP-利用java中的动态代理和Spring的拦截器做到AOP
NULL 博文链接:https://hyp1987.iteye.com/blog/1833776
JDK动态代理,关于jdk动态代理的问题!详细的说明!JDK动态代理JDK动态代理
主要对Spring AOP的相关概念和简单的静态代理、动态代理以及常见的几种AOP配置方式做总结学习。主要包括:1. AOP的常见概念 2. 静态代理 3. jdk动态代理 4. Aspectj and Aspectjweaver 5. **aop-config** 6. CGLIB ...
AOP之JDK动态代理和CGLib动态代理 ,具体效果和过程看博文 http://blog.csdn.net/evankaka/article/details/45195383
$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jdk/jdk1.7.0_10/bin/java 300 $ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jdk/jdk1.7.0_10/bin/javac 300 $ ...
NULL 博文链接:https://fruitking.iteye.com/blog/601106
Spring AOP 使用的动态代理主要有两种方式:JDK 动态代理和 CGLIB 代理。 JDK 动态代理:用于代理实现了接口的类。Spring 会使用 java.lang.reflect.Proxy 类来创建代理对象。 CGLIB 代理:用于代理没有实现接口的...