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动态代理++++++++++++++++ ...
随机推荐
- 骑士cms(74cms)个人版 整合UC
1.安装74cms完成后登录总后台在菜单条工具选项中添加uc整合菜单. 在admin/templates/sys/admin_left_tools.htm这个文件中添加 <li >< ...
- Ecshop后台订单列表增加”商品名”检索字段
近期ecshop网站做活动,统计商品订单量的时候没有按商品名搜索的选项,只能手动查询.这样效率很低下,而且容易出错. 现在为列表增加一个简单的“按商品名搜索”表单项.效果如下图 涉及到2个文件,分别是 ...
- YTU 3006: 迷宫问题(栈与队列)
3006: 迷宫问题(栈与队列) 时间限制: 1 Sec 内存限制: 128 MB 提交: 3 解决: 1 题目描述 编写一个求解迷宫问题的程序,要求输出迷宫的所有路径,并求最短路径长度及最短路径 ...
- YTU 2974: C语言习题5.26--文件操作3
2974: C语言习题5.26--文件操作3 时间限制: 1 Sec 内存限制: 128 MB 提交: 213 解决: 92 题目描述 文本文件score.dic 中存储了n名学生的信息(班级编号 ...
- js格式化日期 年月日
/** * 格式化日期 * @param value * @param row ...
- 周赛-Equidistant String 分类: 比赛 2015-08-08 15:44 6人阅读 评论(0) 收藏
time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...
- 哈夫曼树-Fence Repair 分类: 树 POJ 2015-08-05 21:25 2人阅读 评论(0) 收藏
Fence Repair Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 32424 Accepted: 10417 Descri ...
- 实现LUT
//实现LUT 查找表 #include "stdafx.h" #include <iostream> #include <opencv2/opencv.hpp& ...
- ubuntu查看内存占用和查看cpu使用情况的简单方法(ubuntu内存管理)
单独查看内存使用情况的命令:free -m查看内存及cpu使用情况的命令:top也可以安装htop工具,这样更直观,安装命令如下:sudo apt-get install htop安装完后,直接输入命 ...
- C#之猴子吃桃儿问题的解法——猴子吐桃儿
猴子第一天摘了许多个桃子,先吃了所有桃子的一半,后又吃了一个:第二天又吃了剩下桃子的一半,后又吃了一个……第十天,剩1个桃子.问:猴子第一天摘了多少个桃子? 首先对“猴子吃桃”的过程进行正向推导,设: ...