SpringAop学习
Spring Aop (jdk动态代理和cglib代理)
Aop 的概念
aop即面向切面编程,一般解决具有横切面性质的体统(事务,缓存,安全)
JDK动态代理:
可以使用实现proxy 类,实现jdk的动态代理
步骤
1.创建目标接口
package com;
public interface IPerson {
public void print();
}
2.实现目标接口
package com;
public class Person implements IPerson {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Person() {
super();
}
public Person(String name) {
super();
this.name = name;
}
@Override
public void print() {
System.out.println("Person.print()");
}
}
3.创建代理工厂类
1.实现实现 invcationHandler 接口
2,申明一个对象作为代理的属性
3.申明一个createObject方法 返回一个代理对象 (Proxy.newProxyInstance("获得属性对象的类加载",“获得属性对象的接口结合”,this 当前对象));
4.invoke方法,对此对象进行处理 参数(Proxy ,method,Object o)注:Proxy代理对象,method 对象的方法,Object 为对象的参数列表
package com; import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy; public class Proxys implements InvocationHandler{ private Object p;
public Object createObject(Object p){
this.p=p;
return Proxy.newProxyInstance(p.getClass().getClassLoader(), p.getClass().getInterfaces(), this);
} @Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Person person=(Person)p;
Object obj=null;
if(person.getName()!=null){
System.out.println(person.getName());
obj=method.invoke(p, args);
}else{
System.out.println("名字为空,被拦截");
}
return obj;
} }
一个简单的
public interface OtherBean{
void f1();
}
public class OtherBeanService implements OtherBean{
private Object obj;
public OtherBeanService(Object obj){
this.obj=obj;
}
public Object invoke(Proxy proxy,Method method,Object args){
System.out.println("代理方法");
method.invoke(obj,args)
return null;
}
}
public class Test{
public static void main(String args[]){
OtherBean otherBean=new OtherBeanService();
ProxyUser proxyUser=new ProxyUser(otherBean);
OtherBean ob=(OtherBean)Proxy.newProxyInsance(otherbean.getClass.getClassLoader,otherBean.getClass.Interfaces,proxyUser);
ob.print();
}
}
利用CGLIB实现AOP功能
此方式不用有接口,导入jar包
1.先导入这两个jar 包
asm-3.3.1.jar
cglib-2.2.2.jar
2.写业务类
public class Student{
private String name;
public Student(String name){
this.name=name;
}
public void print(){
System.out.println("print");
}
}
//
public gig implement MethodIntercepter{
private Object obj;
public gig(Object obj){
this.obj=obj;
}
public Object intercept(Method method,Object [] obj,object args){//具体参数不记得了
System.out.println("代理方法!")
}
}
然后测试:省略!
spring 的aop进行登录,并且获取登录用时
贴代码



SpringAop学习的更多相关文章
- spring-aop学习
SpringAOP学习 author:luojie 1. AOP中的基本概念 AOP的通用术语,并非spring java所特有.很遗憾AOP的术语不是特别的直观.但如果让Spring java来 ...
- springAOP学习笔记
目录 基础 引用 AOP方法 使用 xml配置 注解配置 基础 什么是aop? 把我们程序重复的代码抽取出来,在需要执行的时候,使用动态代理的技术,在不修改源码的 基础上,对我们的已有方法进行增强. ...
- spring-aop学习【基于注解】
我个人觉得,这个好像就是用在定制日志输出上,和log4j很像. 用途: 如果业务方法调用每一步都需要详细的日志,那就用这个吧 好处就是: 方便维护,只包含业务代码 下面开始说明: 所需要的jar包: ...
- SpringAOP学习第一天 @Pointcut注解
自从上班之后,就很少再看AOP相关的内容,几年时间里虽然也有一两次完整看过,一直没有机会用到,都忘记了.今天重温一下 TestNG测试类 package com.test.spring.aop.min ...
- SpringAOP学习之5种通知
一.Spring的AOP分为以下5种类型通知 ①前置通知(Before):在连接点执行前执行该通知 ②正常返回通知(AfterReturning):在连接点正常执行完后执行该通知,若目标方法执行异常则 ...
- Spring学习笔记四:SpringAOP的使用
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6776247.html 一:AOP基础概念 (1)通知(增强)Advice 通知,其实就是我们从众多类中提取出 ...
- spring框架学习笔记5:SpringAOP示例
1.导包: 导入spring中的这两个包 再导入其他包(网上下载): 2.准备目标对象: package service; public class UserServiceImpl implement ...
- SpringAOP深入学习
----------------------Spring AOP介绍------------------ 1.编程范式概念 面向过程编程:C 面向对象编程:c++,Java 函数式编程 事件驱动编程: ...
- spring源码学习之:springAOP实现底层原理
一:springAOP底层实现是基于动态代理实现的.增强和切面,以及通知.是在动态代理生成的代理类inoke方法中调用实现 //+++++++++++++aop动态代理++++++++++++++++ ...
随机推荐
- NSScanner用法详解
NSScanner类用于在字符串中扫描指定的字符,尤其是把它们翻译/转换为数字和别的字符串.可以在创建NSScaner时指定它的string属性,然后scanner会按照你的要求从头到尾地扫描这个字符 ...
- jquery 当前链接激活传递参数|div的切换显示
一.链接激活时传递参数 $("a").click(function(){ var obj=$(this).attr("field"); //获取当前field ...
- ACM题目————玩转二叉树
给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列.所谓镜面反转,是指将所有非叶结点的左右孩子对换.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出 ...
- 局域网 其它主机ping不通win7, 解决
默认情况下,Windows 7出于安全考虑不允许外部主机对其进行Ping测试. 允许ICMP回显 设置如下: 1. 打开win7防火墙设置界面 2. 左边的菜单中选择 [高级设置] 3. 在弹出的 [ ...
- android技术总结
1.要做一个尽可能流畅的ListView,你平时在工作中如何进行优化的? ①Item布局,层级越少越好,使用hierarchyview工具查看优化. ②复用convertView ③使用ViewHol ...
- winform中利用反射实现泛型数据访问对象基类(1)
考虑到软件使用在客户端,同时想简化代码的实现,就写了一个泛型的数据访问对象基类,并不是特别健全,按道理应该参数化的方式实现insert和update,暂未使用参数化,抽时间改进. /// <su ...
- C#实现中国天气网JSON接口测试
接上一篇,经过反复的查看,最终从这篇文章中找到了一个可用的JSON接口,于是研究了一下中国天气网JSON接口的测试: 和上一篇XML接口测试的原理是一样的,只是需要安装一下Newtonsoft.Jso ...
- 检索 COM 类工厂中 CLSID 为 {} 的组件时失败,原因是出现以下错误: 80070005
检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005.跟踪了一下,结果是将记录导出 ...
- 2016年10月30日 星期日 --出埃及记 Exodus 19:15
2016年10月30日 星期日 --出埃及记 Exodus 19:15 Then he said to the people, "Prepare yourselves for the thi ...
- centos 001
CentOS6.5中修改yum源 在自己安装的CentOS6.5中使用yum安装软件,总是提示404错误信息,百度后发现原来要设置yum源. 在安装完CentOS后一般需要修改yum源,才能够在安装更 ...