今天整理复习一下spring的代理实现机制,动态代理与静态代理,一个基于接口,一个基于实现类
spring基本配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!--静态代理类,需要构造子的实现,对应相应代理接口 -->
<bean id="staticProxy" class="com.kangkang.proxy.StaticProxy">
<constructor-arg ref="userDaoImp"></constructor-arg>
</bean>
<!--动态代理类 -->
<bean id="dynaProxy" class="com.kangkang.proxy.DynaProxy"></bean>
<!--接口实现类 -->
<bean id="userDaoImp" class="com.kangkang.daoimp.UserDAOIMP"></bean>
<!--业务测试 -->
<bean id="userAction" class="com.kangkang.server.UserAction">
<property name="userDAOIMP" ref="userDaoImp"></property>
<property name="user" ref="user"></property>
</bean>
<!--vo对象 -->
<bean id="user" class="com.kangkang.vo.User"></bean>
</beans>
接口类:
public interface UserDAO {
boolean insert(User user);
void test();
}
接口实现类:
public class UserDAOIMP implements UserDAO {
public boolean insert(User user) {
System.out.println("UserDAOIMP的insert方法被调用");
return false;
}
public void test() {
System.out.println("UserDAOIMP的test方法被调用");
}
}
静态代理类:
public class StaticProxy implements UserDAO {
public UserDAO userDAO;
/**
* 构造子构造被代理对象
* @param userDAO
*/
public StaticProxy(UserDAO userDAO) {
this.userDAO = userDAO;
}
public boolean insert(User user) {
// TODO Auto-generated method stub
return userDAO.insert(user);
}
public void test() {
// TODO Auto-generated method stub
doBefore();
userDAO.test();
doAfter();
}
private void doAfter() {
// TODO Auto-generated method stub
System.out.println("执行方法完毕");
}
private void doBefore() {
// TODO Auto-generated method stub
System.out.println("开始执行方法");
}
}
动态代理类;
public class DynaProxy implements InvocationHandler {
private Object obj;
/**
* 创建代理对象
* @param obj
* @return
*/
public Object createObject(Object obj){
this.obj=obj;
return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(),this);
}
/**
* 通过反射机制执行被代理对对象方法
* @param proxy
* @param method
* @param args
*/
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
doBefore();
Object object =method.invoke(obj, args);
doAfter();
return object;
}
private void doBefore(){
System.out.println("开始执行方法");
}
private void doAfter(){
System.out.println("方法执行完毕");
}
}
分享到:
相关推荐
主要对Spring AOP的相关概念和简单的静态代理、动态代理以及常见的几种AOP配置方式做总结学习。主要包括:1. AOP的常见概念 2. 静态代理 3. jdk动态代理 4. Aspectj and Aspectjweaver 5. **aop-config** 6. CGLIB ...
Spring专题与案例 Spring代理 静态代理和动态代理 Spring专题与案例-代理(静态和动态) Spring专题与案例-代理(静态和动态)
结合spring框架实现的静态代理,接口回掉
NULL 博文链接:https://daxiaoli123.iteye.com/blog/940784
静态代理--不适合企业开发,适合初学者理解代理。 jdk动态代理--适合企业级开发,但是它要求必须面向接口编程,假如目标类没有实现接口,则没办法代理这个类。 cglib代理, 1.cglib(Code Generation Library)是一...
此资源为文章中《代理设计模式:静态代理和动态代理的理解、实现与区别(优缺点)》与《 AOP动态代理声明式的3种配置方式过程与区别》的案例代码,可下载参考学习。
- 静态代理与动态代理 - 常见的动态代理实现 - JDK Proxy - CGLIB - JDK Proxy 和 CGLIB 的对比 - 动态代理的实际应用 - Spring AOP 说在前面:今天我们来聊一聊 Java 中的代理,先来聊聊故事背景: 小明想...
这是一个基于spring AOP静态代理模拟的案例,可以更好的理解spring的aop作用
主要介绍了 Spring AOP里的静态代理和动态代理用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Spring框架AOP静态代理
静态代理的实现,动态代理实现,spring代理实现项目源代码
为某一个对象创建一个代理对象,程序不直接用原本的对象,而是由创建的代理对象来控制原对象,通过代理类这中间一层,能有效控制对委托类对象的直接访问,也可以很好地隐藏和保护委托类对象,同时也为实施不同控制...
AOP实现的关键在于AOP框架自动创建的AOP代理,AOP代理主要分为静态代理和动态代理,静态代理的代表为AspectJ;而动态代理则以Spring AOP为代表。 何为切面? 一个和业务没有任何耦合相关的代码段,诸如:调用日志,...
sping AOP面向切面的编程,程序运行过程中动态加入所需代码等,对公共的问题进行集中处理,具体的实现有动态代理与静态代理,本文通过对AOP的代理机制,前置、后置、环绕、异常的通知进行了综合总结和运用!
web开发技术spring框架控制反转思想IOC学习笔记,并对java的静态代理和动态代理进行了相关叙述
spring AOP,静态代理,动态代理,cglib,Spring整合Mybatis 与三,SpringAOP文章相对应
spring-3 演示使用动态代理模式实现面向切面编程 使用注解方式进行AOP编程及使用配置xml方式进行AOP编程 spring-4 演示了spring与JDBCTemplate配合使用 spring-5 演示了声明式事务及使用xml配置文件处理事务
AOP 实现的关键就在于 AOP 框架自动创建的 AOP 代理,AOP 代理主要分为静态代理和动态代理两大类,静态代理以 AspectJ 为代表;而动态代理则以 Spring AOP 为代表。其中静态代理是指使用 AOP 框架提供的命令进行编译...
4.1.3 Spring的动态代理 71 4.2 AOP编程 71 4.2.1概念: 71 SpringAOP概念拓展: 73 之前实现了目标方法的动态调用,现在来实现切面的动态调用。 74 4.2.2 AOP实现的两种模式 78 4.2.2.1 xml形式 78 XML形式拓展: ...
Spring3.0学习文档主要讲解的是IOC和AOP 静态代理、动态代理这些内容是Spring3.0中最难理解的重点知识点