`

spring动态代理与静态代理

阅读更多
今天整理复习一下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 之 静态代理 动态代理 Aspectj aop-config 等实现方式

    主要对Spring AOP的相关概念和简单的静态代理、动态代理以及常见的几种AOP配置方式做总结学习。主要包括:1. AOP的常见概念 2. 静态代理 3. jdk动态代理 4. Aspectj and Aspectjweaver 5. **aop-config** 6. CGLIB ...

    Spring专题与案例-代理(静态和动态)

    Spring专题与案例 Spring代理 静态代理和动态代理 Spring专题与案例-代理(静态和动态) Spring专题与案例-代理(静态和动态)

    spring+静态代理

    结合spring框架实现的静态代理,接口回掉

    Spring的静态代理和动态代理

    NULL 博文链接:https://daxiaoli123.iteye.com/blog/940784

    cglib aop spring 动态代理

    静态代理--不适合企业开发,适合初学者理解代理。 jdk动态代理--适合企业级开发,但是它要求必须面向接口编程,假如目标类没有实现接口,则没办法代理这个类。 cglib代理, 1.cglib(Code Generation Library)是一...

    代理设计模式:静态代理和动态代理的理解、实现与区别(优缺点)与SpringAOP的3种配置方式案例工程代码

    此资源为文章中《代理设计模式:静态代理和动态代理的理解、实现与区别(优缺点)》与《 AOP动态代理声明式的3种配置方式过程与区别》的案例代码,可下载参考学习。

    Java 代理 代理模式 静态代理与动态代理 常见的动态代理实现 .md

    - 静态代理与动态代理 - 常见的动态代理实现 - JDK Proxy - CGLIB - JDK Proxy 和 CGLIB 的对比 - 动态代理的实际应用 - Spring AOP 说在前面:今天我们来聊一聊 Java 中的代理,先来聊聊故事背景: 小明想...

    Spring模拟aop静态代理案例

    这是一个基于spring AOP静态代理模拟的案例,可以更好的理解spring的aop作用

    Spring AOP里的静态代理和动态代理用法详解

    主要介绍了 Spring AOP里的静态代理和动态代理用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    Spring框架AOP静态代理.pdf

    Spring框架AOP静态代理

    spring代理实现项目

    静态代理的实现,动态代理实现,spring代理实现项目源代码

    Spring AOP的静态代理和动态代理,转移到调用处理器一个集中的方法中处理.docx

    为某一个对象创建一个代理对象,程序不直接用原本的对象,而是由创建的代理对象来控制原对象,通过代理类这中间一层,能有效控制对委托类对象的直接访问,也可以很好地隐藏和保护委托类对象,同时也为实施不同控制...

    AOP从静态代理到动态代理(Emit实现)详解

    AOP实现的关键在于AOP框架自动创建的AOP代理,AOP代理主要分为静态代理和动态代理,静态代理的代表为AspectJ;而动态代理则以Spring AOP为代表。 何为切面? 一个和业务没有任何耦合相关的代码段,诸如:调用日志,...

    spring AOP代理机制.docx

    sping AOP面向切面的编程,程序运行过程中动态加入所需代码等,对公共的问题进行集中处理,具体的实现有动态代理与静态代理,本文通过对AOP的代理机制,前置、后置、环绕、异常的通知进行了综合总结和运用!

    spring_ioc.docx

    web开发技术spring框架控制反转思想IOC学习笔记,并对java的静态代理和动态代理进行了相关叙述

    Spring框架,AOP,Spring整合Mybatis

    spring AOP,静态代理,动态代理,cglib,Spring整合Mybatis 与三,SpringAOP文章相对应

    spring4示例代码

    spring-3 演示使用动态代理模式实现面向切面编程 使用注解方式进行AOP编程及使用配置xml方式进行AOP编程 spring-4 演示了spring与JDBCTemplate配合使用 spring-5 演示了声明式事务及使用xml配置文件处理事务

    Spring3注解

    AOP 实现的关键就在于 AOP 框架自动创建的 AOP 代理,AOP 代理主要分为静态代理和动态代理两大类,静态代理以 AspectJ 为代表;而动态代理则以 Spring AOP 为代表。其中静态代理是指使用 AOP 框架提供的命令进行编译...

    spring.doc

    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学习文档

    Spring3.0学习文档主要讲解的是IOC和AOP 静态代理、动态代理这些内容是Spring3.0中最难理解的重点知识点

Global site tag (gtag.js) - Google Analytics