CGLIB动态代理机制(tedu)(内含源代码)
创始人
2024-05-31 02:11:48
0

CGLIB动态代理机制(tedu)(内含源代码)

源代码下载链接地址:https://download.csdn.net/download/weixin_46411355/87546785

目录

  • CGLIB动态代理机制(tedu)(内含源代码)
  • `源代码下载链接地址:`[https://download.csdn.net/download/weixin_46411355/87546785](https://download.csdn.net/download/weixin_46411355/87546785)
  • 一、创建一个SpringBoot项目
  • 二、数据库代码-铺垫
    • 2.1 代码结构如下
    • 2.2 配置类
    • 2.3 编辑UserDao接口/实现类
      • 2.3.1 编辑UserDao接口
      • 2.3.2 编辑UserDaoImpl
    • 2.4 编辑UserService接口/实现类
      • 2.4.1编辑UserService
      • 2.4.2 编辑UserServiceImpl
    • 2.5 编辑测试类
    • 2.6 关于测试代码总结
  • 三、动态代理机制-CGLIB
    • 3.1 Cglib代理说明
    • 3.2 编辑Service实现类
    • 3.3 编辑cglib代理对象
    • 3.4 编辑测试类
    • 3.5 测试效果

一、创建一个SpringBoot项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、数据库代码-铺垫

2.1 代码结构如下

在这里插入图片描述

2.2 配置类

com.jt
SpringConfig.java

package com.jt.config;import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;@ComponentScan("com.jt")
@Configuration
public class SpringConfig {}

2.3 编辑UserDao接口/实现类

2.3.1 编辑UserDao接口

public interface UserDao {void addUser();
}

2.3.2 编辑UserDaoImpl

@Repository
public class UserDaoImpl implements UserDao{@Overridepublic void addUser() {System.out.println("完成用户新增操作");}
}

2.4 编辑UserService接口/实现类

2.4.1编辑UserService

public interface UserService {void addUser();
}

2.4.2 编辑UserServiceImpl

@Service
public class UserServiceImpl implements UserService{@Autowiredprivate UserDao userDao;@Overridepublic void addUser() {System.out.println("数据库事务开始");userDao.addUser();System.out.println("数据库事务提交");}
}

2.5 编辑测试类

class Springdemo8ProxyApplicationTests {@Testvoid contextLoads() {ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);UserService userService = context.getBean(UserService.class);userService.addUser();}}

测试结果如下:

在这里插入图片描述

2.6 关于测试代码总结

如果将业务代码和事务代码都写到一起,则会造成代码的耦合性增加. 不方便程序的扩展.

三、动态代理机制-CGLIB

3.1 Cglib代理说明

特点:
1.代理对象是目标对象的子类.

3.2 编辑Service实现类

由于特殊原因,Service中不能注入Dao. 暂时不管dao数据的实例化操作

package com.jt.service;import com.jt.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class UserServiceImpl implements UserService{@Autowiredprivate UserDao userDao;@Overridepublic void addUser() {//System.out.println("数据库事务开始");//userDao.addUser();System.out.println("完成用户入库操作");//System.out.println("数据库事务提交");}
}

3.3 编辑cglib代理对象

package com.jt.proxy;import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;public class CglibProxy {public static Object getObject(Object target){//创建增强器对象Enhancer enhancer = new Enhancer();//设置父级enhancer.setSuperclass(target.getClass());enhancer.setCallback(getMethodInterceptor());return enhancer.create();}public static MethodInterceptor getMethodInterceptor(){return new MethodInterceptor() {@Overridepublic Object intercept(Object obj, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {System.out.println("数据库事务开始");//执行父类的方法Object proxy = methodProxy.invokeSuper(obj,objects);System.out.println("数据库事务提交");return proxy;}};}}

3.4 编辑测试类

	@Testvoid testCGB(){ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);UserService userService = context.getBean(UserService.class);//使用代理对象 调用方法UserService proxy = (UserService) CglibProxy.getObject(userService);proxy.addUser();}

3.5 测试效果

在这里插入图片描述

相关内容

热门资讯

暨迎元旦合唱比赛主持词 暨迎元旦合唱比赛主持词  主持词没有固定的格式,他的最大特点就是富有个性。在当下这个社会中,很多场合...
六一主持词开场白和结束语 六一主持词开场白和结束语(精选9篇)  主持词是各种演出活动和集会中主持人串联节目的串联词。在如今这...
国学大讲堂主持词 国学大讲堂主持词  (开场语)同学们老师们:  大家下午好!在各方的积极努力下,国学大讲堂终于以全新...
文艺汇演主持词优秀 文艺汇演主持词优秀  主持词要注意活动对象,针对活动对象写相应的主持词。在当下这个社会中,主持人在活...
《老爸快跑》里的经典台词 《老爸快跑》里的经典台词  《老爸快跑》是由高一功执导,张云宵编剧,徐峥、伊春德主演的电视剧,于20...
公司领导年会致辞 公司领导年会致辞  在日常学习、工作和生活中,大家或多或少都用到过致辞吧,致辞要求风格的雅、俗、庄、...
秋季开学典礼主持词 秋季开学典礼主持词(精选6篇)  主持词已成为各种演出活动和集会中不可或缺的一部分。在一步步向前发展...
当幸福来敲门经典台词 当幸福来敲门经典台词大全  在日新月异的现代社会中,我们都可能会用到台词,台词可以刻画人物的性格,表...
六一儿童节开幕致辞 六一儿童节开幕致辞(通用5篇)  在日常的学习、工作、生活中,大家一定都接触过致辞吧,致辞要求风格的...
春晚主持词 春晚主持词(精选11篇)  主持词要根据活动对象的不同去设置不同的主持词。随着社会一步步向前发展,各...
小学国庆节主题活动主持词 小学国庆节主题活动主持词  主持词是主持人在节目进行过程中用于串联节目的串联词。在当下的社会中,活动...
八年级班会主持词 八年级班会主持词  主持词要注意活动对象,针对活动对象写相应的主持词。在如今这个中国,活动集会越来越...
职工追悼词 职工追悼词 各位亲友、各位来宾:  今天我们怀着十分沉痛的心情深切悼念退休职工×××。  ×××因病...
春天活动主持词 春天活动主持词  大家上午好!  踏着春天的脚步,踩着春风的节拍,春天已经来到我们中间,春天是生命的...
幼儿园家长会园长致辞 幼儿园家长会园长致辞幼儿园家长会园长致辞亲爱的家长、老师们:首先感谢大家在百忙中抽空参加今天举行的家...
教师节活动主持词 教师节活动主持词  一、什么是主持词  由主持人于节目进行过程中串联节目的串联词。如今的各种演出活动...
百日宴致辞 百日宴致辞范文  在日复一日的学习、工作或生活中,许多人都有过写致辞的经历,对致辞都不陌生吧,在各种...
2021年会总经理简短致辞 2021年会总经理简短致辞范文(通用6篇)  在学习、工作、生活中,许多人都有过写致辞的经历,对致辞...
中学秋季开学典礼主持词 中学秋季开学典礼主持词  中学秋季开学典礼主持词    第一项:升国旗仪式(升旗仪式结束后,请新教师...
婚礼男方家长经典致辞 婚礼男方家长经典致辞  大家好!今天是我儿子××和××小姐结婚的大喜日子,我感到非常高兴和荣幸。高兴...