当前位置: 首页 > news >正文

办公室装修公司哪里好aso优化师工作很赚钱吗

办公室装修公司哪里好,aso优化师工作很赚钱吗,变性人做欲网站,徐州人才网档案查询一、Spring AOP与代理模式 ** 1.动态代理是Spring AOP的核心** AOP的本质是在不修改原始代码的前提下,为目标对象添加额外功能(如日志、事务、权限校验等),而动态代理正是实现这一目标的关键技术。它能在运行时动态生成代理对象,拦截对目标对象的方法调用,并在调用前后…

一、Spring AOP与代理模式

** 1.动态代理是Spring AOP的核心**

AOP的本质是在不修改原始代码的前提下,为目标对象添加额外功能(如日志、事务、权限校验等),而动态代理正是实现这一目标的关键技术。它能在运行时动态生成代理对象,拦截对目标对象的方法调用,并在调用前后插入自定义逻辑。

2.Spring AOP支持的动态代理方式

Spring根据目标对象的类型,会自动选择不同的代理实现:

  1. JDK动态代理

    • 原理:基于Java原生的java.lang.reflect.Proxy类,要求目标对象必须实现接口。
    • 示例:若目标类UserService实现了接口UserServiceInterface,则代理对象会实现相同接口,并通过InvocationHandler拦截方法调用。
    • 限制:无法代理没有接口的类。
  2. CGLIB代理

    • 原理:通过字节码生成库CGLIB,生成目标类的子类作为代理对象(基于继承)。
    • 示例:若目标类UserService没有实现接口,Spring会使用CGLIB生成UserService的子类,重写方法以实现拦截。
    • 优势:无需接口即可代理,适用于普通类。
  3. ByteBuddy(Spring 5+新增)

    • 原理:性能比CGLIB更优的字节码生成库,通过生成子类或动态修改类字节码实现代理。
    • 应用场景:当需要更高性能的代理时,Spring会自动选择ByteBuddy(需引入相关依赖)。
3.Spring AOP代理的选择机制

Spring通过ProxyFactory决定使用哪种代理方式:

  • 若目标对象实现了接口,优先使用JDK动态代理
  • 若目标对象是普通类(无接口),则使用CGLIB或ByteBuddy代理
  • 可通过配置proxy-target-class=true强制使用CGLIB/ByteBuddy代理(即使有接口)。

二、示例:JDK动态代理

1.JDK动态代理的流程如下:
  1. 定义切面(Aspect)
    通过@Aspect注解声明切面类,使用@Before@After等注解定义通知(Advice)。

  2. 创建代理对象
    Spring容器在初始化时,若检测到bean需要被AOP增强,会通过BeanPostProcessor(如AnnotationAwareAspectJAutoProxyCreator)生成代理对象。

  3. 方法拦截与通知执行

    • 当调用代理对象的方法时,JDK动态代理会将调用转发给InvocationHandler.invoke()方法。
    • invoke()中,Spring会根据切点(Pointcut)判断是否需要执行切面逻辑,按顺序调用前置、后置、环绕等通知。
  4. 返回结果或处理异常
    通知执行完毕后,将结果返回给调用方,或处理可能的异常。

2.代码示例
// 1. 定义接口
public interface UserService {void saveUser(String name);
}// 2. 实现类
@Service
public class UserServiceImpl implements UserService {@Transactional // 事务增强public void saveUser(String name) {// 数据库操作}
}// 3. 配置类(默认配置,无需显式指定proxyTargetClass=false)
@Configuration
@EnableTransactionManagement
public class AppConfig {// 配置...
}
// 4.Controller
@Controller
@Slf4j
public class UserController {@Autowiredprivate UserService userService;@PostConstructpublic void init() {// 1. 直接打印类名log.info("代理类型: " + userService.getClass().getName());// 2. 使用AopUtils判断log.info("是否为JDK代理: " + AopUtils.isJdkDynamicProxy(userService));log.info("是否为CGLIB代理: " + AopUtils.isCglibProxy(userService));// 3. 获取目标类(非代理类)Class<?> targetClass = AopProxyUtils.ultimateTargetClass(userService);log.info("目标类: " + targetClass
http://www.hkea.cn/news/422469/

相关文章:

  • css层叠样式会不会影响打开网站的速度百度免费下载安装百度
  • 网站模板制作流程nba交易最新消息汇总
  • 近的网站在线客服系统网络优化工程师前景如何
  • 网站制作职业google入口
  • 广州网站 制作信科便宜网络营销软文范例500
  • 网站建设公开课长沙网站推广和优化
  • 建设网站的需求分析俄罗斯搜索引擎yandex推广入口
  • 可以做英文纵横字谜的网站搜狗网站收录入口
  • web前端开发是不是做网站百家号关键词排名优化
  • 夸克看网站要钱吗电商网站seo优化
  • 自己做网站排版138ip查询网域名解析
  • 东莞做网站 南城石佳2023网站推广入口
  • 广东省省建设厅网站郴州网站建设网络推广平台
  • 校园网站推广方案怎么做应用商店优化
  • 巩义网站建设网络营销公司是做什么的
  • 做网站基本教程一站式营销平台
  • 杭州模板网站建设电脑培训网上培训班
  • 大连做网站不错的公司怎样把广告放到百度
  • 网站上面带官网字样怎么做的网站设计的流程
  • 有个网站是做视频相册的网球排名即时最新排名
  • 论坛网站备案流程图优化大师怎么提交作业
  • 织梦政府网站模板百度在线入口
  • 专业做婚纱摄影网站会员制营销
  • 网站内容丰富互动营销平台
  • 阿里巴巴logo高清图谷歌seo网站推广
  • 网站如何做内链seo高手是怎样炼成的
  • 设计师个人网站建设怎样注册一个自己的平台
  • 徐州营销网站建设产品线上推广渠道
  • 绍兴市网站建设公司企业官网搭建
  • 关于网页设计的网站免费发布信息网站大全