`

hibernate学习笔记第13讲-jdk动态代理和CGLib

阅读更多

 

Jdk动态代理,CGLib字节码生成

如果目标对象实现了接口,可以使用jdk动态代理和CGLib

如果没有实现接口,只能使用CGLib

Jdk动态代理要实现一个接口:InvocationHandler

 

public class SecurityHandler implements InvocationHandler {

//目标对象,对该目标对象生成代理

         private Object targetObject;

        

//生成代理对象,当生成完代理对象,调用代理对象上的方法时,默认先调用invoke方法。

         public Object newProxy(Object targetObject) {

                   this.targetObject = targetObject;

                   return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),

                                                                                      targetObject.getClass().getInterfaces(),

                                                                                      this);

         }

        

         public Object invoke(Object proxy, Method method, Object[] args)

                            throws Throwable {

                   checkSecurity();

                   //目标对象方法的返回值

                   Object ret = null;

                   try {

                            //调用目标对象的真实实现

                            ret = method.invoke(this.targetObject, args);

                   }catch(Exception e) {

                            e.printStackTrace();

                            throw new java.lang.RuntimeException(e);

                   }

                   return ret;

         }

         private void checkSecurity() {

                   System.out.println("----------checkSecurity()---------------");

         }}

//使用动态代理

public static void main(String[] args) {

                   SecurityHandler handler = new SecurityHandler();

                   UserManager userManager = (UserManager)handler.newProxy(new UserManagerImpl());

                   //userManager.addUser("张三", "123");

                   userManager.deleteUser(1);

         }

分享到:
评论
2 楼 yu1272692827 2013-04-09  
                        
1 楼 yu1272692827 2013-04-09  
  

相关推荐

    Hibernate学习笔记

    ### Hibernate学习笔记知识点详解 #### Hibernate简介 - **定义与作用**:Hibernate是一种“对象/关系映射”(Object/Relational Mapping, ORM)技术,主要用于解决Java对象模型与关系数据库模型之间的不匹配问题。 -...

    Spring学习笔记1

    在Java中,AOP主要通过两种方式实现:JDK动态代理和CGLib。JDK动态代理是基于接口的,通过Proxy类和InvocationHandler接口实现,当调用代理对象的方法时,实际上会通过中介对象调用invoke方法。而CGLib则是通过字节...

    黑马程序员 hibernate 2016版讲义和笔记(4天全)

    此外,还可以探讨CGLIB和ASM动态代理,以及Hibernate的事件监听机制。 通过这4天的学习,你将对Hibernate有深入的理解,并能够熟练地在项目中应用。记住,理论知识结合实践才能真正掌握,因此,尝试在实际项目中...

    Spring技术内幕 学习笔记

    AOP通过代理模式实现,有JDK动态代理和CGLIB两种方式。学习笔记可能涉及如何定义切面(Aspect)、通知(Advice)和切入点表达式(Pointcut),以及如何配置和使用AOP代理。 Spring MVC是Spring框架中的Web层组件,...

    Spring的学习笔记

    - **动态代理**:Spring AOP通过动态代理技术实现切面,包括JDK动态代理和CGLIB代理。 **AOP配置** - **注解方式**:使用@Aspect,@Before,@After等注解定义切面、通知和切入点表达式。 - **XML方式**:在配置...

    Spring学习思维笔记.pdf

    CGLib(Code Generation Library)是一个第三方代码生成库,它提供了一系列API用于字节码操作,可以用来生成Java类的子类,在运行期间扩展被代理类。CGLib动态代理在性能上往往优于JDK动态代理,特别是在JDK 1.8之前...

    java常用框架学习笔记

    **Spring中的代理**:Spring支持两种类型的代理:JDK动态代理和CGLIB代理。前者基于Java的反射机制,后者则基于字节码增强技术。 #### Spring2.x Spring 2.x版本引入了许多新特性,比如改进的AOP支持、增强的声明...

    Spring高级源码学习笔记.zip

    AOP代理有两种实现方式:JDK动态代理和CGLIB。前者针对实现了接口的类,后者则在没有接口的情况下通过子类化目标类实现。源码中,Advised接口和ProxyFactoryBean扮演着关键角色。 在数据访问/集成方面,Spring提供...

    Spring2.5学习笔记

    ### Spring2.5学习笔记 #### Spring是什么? Spring是一个开源框架,主要应用于Java平台上的企业级应用程序开发。它提供了一种轻量级的容器管理机制,通过依赖注入(DI)和面向切面编程(AOP)来降低组件间的耦合...

    spring培训学习笔记

    Spring支持两种AOP实现:基于代理的AOP,通过JDK动态代理或CGLIB生成代理对象实现切面;基于注解的AOP,直接在类或方法上使用注解来定义切面。 总的来说,Spring框架是一个全面的应用程序框架,它通过控制反转、...

    spring学习笔记

    AOP通过动态代理实现,可以是JDK动态代理或CGLIB代理,使得代码更加模块化和可复用。 四、数据访问 Spring提供了对各种数据访问技术的支持,如JDBC、JPA、Hibernate等。Spring的声明式事务管理使得事务处理变得...

    Spring学习笔记

    2. 动态代理:Spring支持JDK和CGLIB两种动态代理方式。动态代理可以在运行时生成代理对象,无需预先编写代理类,简化了代码。JDK动态代理基于接口,而CGLIB则是在运行时动态生成一个目标类的子类来实现代理。 总的...

    Spring 2.0核心技术学习笔记总结

    AOP通过代理模式实现,包括JDK动态代理和CGLIB代理。 ### 4. **Bean的生命周期** Spring 2.0中的Bean有完整的生命周期管理,包括初始化、正常运行和销毁三个阶段。开发者可以通过实现特定接口或使用注解来定制Bean...

    Hibernate新手上路

    3. `cglib-2.1.3.jar`:生成字节码库,Hibernate使用它来动态创建实体类的代理,以便实现透明持久化。 4. `asm.jar` 和 `asm-attrs.jar`:字节码操纵框架,用于动态生成和修改Java类的字节码。 5. `commons-...

    传智播客 Spring 完全文档 笔记总结

    - **与 JDK 动态代理的区别**:CGLIB 通过继承的方式实现代理,因此即使目标对象没有实现任何接口,也可以对其进行代理。 ##### 1.3 AOP 中的概念 - **切面(Aspect)**:切面是模块化的横切关注点,它定义了一组...

    Spring笔记

    6. **spring_dynamic_proxy**、**spring_static_proxy**:这部分可能涉及到Spring的两种代理模式,即JDK动态代理和CGLIB静态代理,它们在实现AOP时起着重要作用。 7. **spring_autowrire_byName**:这部分是关于...

    spring第一次课笔记

    Spring AOP通过代理实现切面的织入,可以是JDK动态代理或CGLIB代理。 5. **Spring Boot**:这是一个简化Spring应用初始设置和运行的框架,通过自动配置和起步依赖,使得创建独立的、生产级别的基于Spring的应用变得...

    Spring Certification Study Notes-开源

    了解通知类型(前置、后置、环绕、异常、最终)和AOP代理(JDK动态代理和CGLIB代理)。 5. **数据访问集成**:Spring支持多种数据库访问技术,如JDBC、ORM(Hibernate、MyBatis)和DAO模式。学习如何配置数据源,...

    spring-learn:spring原始笔记

    7. **代理(Proxy)**:Spring通过动态代理(JDK动态代理或CGLIB代理)来实现AOP功能,创建被通知的对象的代理对象。 三、Spring MVC 8. **Spring MVC**是Spring框架的一部分,用于构建Web应用程序。它提供了一个...

Global site tag (gtag.js) - Google Analytics