iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Spring-AOP怎么自动创建代理
  • 362
分享到

Spring-AOP怎么自动创建代理

2023-06-20 16:06:13 362人浏览 独家记忆
摘要

本篇内容主要讲解“spring-aop怎么自动创建代理”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring-AOP怎么自动创建代理”吧!实例代码已托管到GitHub—> https:

本篇内容主要讲解“spring-aop怎么自动创建代理”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring-AOP怎么自动创建代理”吧!

实例

代码已托管到GitHub—> https://github.com/yangshangwei/SpringMaster

Spring-AOP怎么自动创建代理

在 Spring-AOP 静态普通方法名匹配切面 案例中,我们通过配置两个ProxyFactoryBean分别为waiter和seller的Bean创建代理对象,

如下

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="Http://www.springframework.org/schema/beans"xmlns:p="http://www.springframework.org/schema/p"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 配置切面:静态方法匹配切面 --><!-- Waiter目标类 --><bean id="waiterTarget" class="com.xgj.aop.spring.advisor.StaticMethodMatcherPointcutAdvisor.Waiter"/><!-- Seller目标类 --><bean id="sellerTarget" class="com.xgj.aop.spring.advisor.StaticMethodMatcherPointcutAdvisor.Seller"/><!-- 前置增强 --><bean id="greetBeforeAdvice" class="com.xgj.aop.spring.advisor.StaticMethodMatcherPointcutAdvisor.GreetBeforeAdivce"/><!-- 切面 --><bean id="greetAdvicesor" class="com.xgj.aop.spring.advisor.StaticMethodMatcherPointcutAdvisor.GreetingAdvisor"p:advice-ref="greetBeforeAdvice"/> <!-- 向切面注入一个前置增强 --><!-- 通过父bean,配置公共的信息 --><bean id="parent" abstract="true"  class="org.springframework.aop.framework.ProxyFactoryBean"p:interceptorNames="greetAdvicesor"p:proxyTargetClass="true"/><!-- waiter代理 --><bean id="waiter" parent="parent" p:target-ref="waiterTarget"/><!-- seller代理 --><bean id="seller" parent="parent" p:target-ref="sellerTarget"/></beans>

下面我们通过BeanNameAtuoProxyCreator以更优雅更快捷的方式完成相同的功能

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:p="http://www.springframework.org/schema/p"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 通过Bean名称自动创建代理 --><!-- 目标Bean --><bean id="waiter" class="com.xgj.aop.spring.advisor.autoCreateProxy.BeanNameAutoProxyCreator.Waiter"/><bean id="seller" class="com.xgj.aop.spring.advisor.autoCreateProxy.BeanNameAutoProxyCreator.Seller"/><!-- 增强 --><bean id="greetingBeforeAdvice" class="com.xgj.aop.spring.advisor.autoCreateProxy.BeanNameAutoProxyCreator.GreetingBeforeAdvice"/><!-- 代理      p:beanNames="waiter,seller" --><bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"p:beanNames="*er"p:interceptorNames="greetingBeforeAdvice"p:optimize="true"/></beans>

BeanNameAutoProxyCreator有一个beanNames属性,它允许用户指定一组需要自动代理的Bean名称,Bean名称可以使用*通配符。

假设Spring容器中有waiter和seller外还有其他的bean, 就可以通过beanNames属性设定为“*er” 使wiater和seller这两个bean被自动代理。 当然,如果还有其他以er结尾的bean也会被自动代理器创建代理,为了保险起见,可以使用
<property name="beanNames" value="waiter,seller">的方式限定范围。

一般不会为FactoryBean的Bean创建代理,如果刚好有这样一个需求,这需要在beanNames中指定添加 的Bean 名 称 , 如 ‘ <property name="beanNames"value" 的Bean名称,如`<property name="beanNames" value=" 的Bean名称,如‘<propertyname="beanNames"value="waiter">`

BeanNameAutoProxyCreator的interceptorNames属性指定一个或者多个Bean的名称。

此外还有一个常用的optimize属性,如果将此属性设置为true,则将强制使用CGLib动态代理技术。

通过这样的配置后,容器在创建waiter和seller Bean的实例是,就会自动为他们创建代理对象,而这一操作对使用者来讲完全是透明的。

测试类如下:

package com.xgj.aop.spring.advisor.autoCreateProxy.BeanNameAutoProxyCreator;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class BeanNameAutoProxyCreatorTest {@Testpublic void test() {ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:com/xgj/aop/spring/advisor/autoCreateProxy/BeanNameAutoProxyCreator/conf-beanNameAutoProxy.xml");Waiter waiter = ctx.getBean("waiter", Waiter.class);waiter.greetTo("XiaoGongJiang");waiter.serverTo("XiaoGongJiang");System.out.println("\n");Seller seller = ctx.getBean("seller", Seller.class);seller.greetTo("XiaoGongJiang");seller.serverTo("XiaoGongJiang");}}

运行结果如下:

2017-08-21 16:12:48,086  INFO [main] (AbstractApplicationContext.java:583) - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@5f0101fb: startup date [Mon Aug 21 16:12:48 BOT 2017]; root of context hierarchy
2017-08-21 16:12:48,204  INFO [main] (XmlBeanDefinitionReader.java:317) - Loading XML bean definitions from class path resource [com/xgj/aop/spring/advisor/autoCreateProxy/BeanNameAutoProxyCreator/conf-beanNameAutoProxy.xml]
Pointcut:com.xgj.aop.spring.advisor.autoCreateProxy.BeanNameAutoProxyCreator.Waiter.greetTo
How are you XiaoGongJiang ?
Waiter Greet To XiaoGongJiang
Pointcut:com.xgj.aop.spring.advisor.autoCreateProxy.BeanNameAutoProxyCreator.Waiter.serverTo
How are you XiaoGongJiang ?
Waiter Server To XiaoGongJiang


Pointcut:com.xgj.aop.spring.advisor.autoCreateProxy.BeanNameAutoProxyCreator.Seller.greetTo
How are you XiaoGongJiang ?
Seller Greet To XiaoGongJiang
Pointcut:com.xgj.aop.spring.advisor.autoCreateProxy.BeanNameAutoProxyCreator.Seller.serverTo
How are you XiaoGongJiang ?
Seller Server To XiaoGongJiang

通过输出信息可以得知,从容器返回的Bean的 全部方法都被织入了增强。

到此,相信大家对“Spring-AOP怎么自动创建代理”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: Spring-AOP怎么自动创建代理

本文链接: https://www.lsjlt.com/news/298432.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Spring-AOP怎么自动创建代理
    本篇内容主要讲解“Spring-AOP怎么自动创建代理”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring-AOP怎么自动创建代理”吧!实例代码已托管到Github—> https:...
    99+
    2023-06-20
  • Spring-AOP自动创建代理之BeanNameAutoProxyCreator实例
    实例 代码已托管到Github—> https://github.com/yangshangwei/SpringMaster 在 Spring-AOP 静态普通方法名匹配...
    99+
    2024-04-02
  • Spring AOP 创建代理对象详情
    目录1 前言2 创建代理对象3 AOPContext Aop 上下文4 AOP 分析汇总5 JDK 动态代理和 CGLIB 的区别与联系6 总结1 前言 在这篇文章中中已经讲述了 A...
    99+
    2024-04-02
  • Spring AOP中如何实现自动代理
    小编给大家分享一下Spring AOP中如何实现自动代理,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!这里的自动代理,我讲的是自动代理bean对象,其实就是在xm...
    99+
    2023-05-30
    spring aop
  • Spring AOP原理及动态代理
    目录一、什么是代理1、静态代理2、动态代理二、模拟Spring AOP场景一、什么是代理 指为一个目标对象提供一个代理对象, 并由代理对象控制对目标对象的引用. 使用代理对象, 是为...
    99+
    2024-04-02
  • 带你了解如何使用Spring基于ProxyFactoryBean创建AOP代理
    目录1 基础2 JavaBean属性3 JDK和CGLIB代理总结若使用 Spring IoC 容器(ApplicationContext或BeanFactory)作为你的业务对象(...
    99+
    2024-04-02
  • Spring AOP怎么使用切入点创建通知
    这篇文章主要介绍“Spring AOP怎么使用切入点创建通知”,在日常操作中,相信很多人在Spring AOP怎么使用切入点创建通知问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
    99+
    2024-04-02
  • SpringBoot/Spring AOP默认动态代理方式是什么
    这篇文章主要介绍“SpringBoot/Spring AOP默认动态代理方式是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringBoot/Spring AOP默认动态...
    99+
    2023-07-05
  • Java Spring AOP该怎么理解
    这篇文章给大家介绍Java Spring AOP该怎么理解,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。前言面向切面编程,利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的...
    99+
    2023-06-22
  • Spring之AOP两种代理机制对比分析(JDK和CGLib动态代理)
    目录Spring AOP两种代理机制对比JDK动态代理CGLib动态代理SpringAOP两种代理原理SpringAOP代理JDK动态代理CGLIB代理两者对比使用注意总结Sprin...
    99+
    2023-05-19
    Spring AOP AOP代理机制 JDK动态代理 CGLib动态代理
  • Spring中AOP概念与两种动态代理模式原理详解
    目录1.概念1.AOP技术简介2.AOP的优势3.Spring AOP术语4.AOP 开发明确的事项 2.AOP底层实现1.AOP 的动态代理技术:3.基于cglib的动态...
    99+
    2024-04-02
  • Spring Boot如何动态创建Bean示例代码
    前言本文主要给大家介绍了关于Spring Boot动态创建Bean的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。SpringBoot测试版本:1.3.4.RELEASE参考代码如下:package com.sp...
    99+
    2023-05-31
    springboot 动态创建 bean
  • 非Spring管理Bean怎么添加AOP
    这篇文章主要为大家展示了“非Spring管理Bean怎么添加AOP”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“非Spring管理Bean怎么添加AOP”这篇文...
    99+
    2024-04-02
  • es自动创建索引怎么实现
    在Elasticsearch中,可以通过以下几种方式自动创建索引: 动态映射(Dynamic Mapping):Elastics...
    99+
    2023-10-24
    es
  • 怎么在mysql 中自动创建时间
    这篇文章给大家介绍怎么在mysql 中自动创建时间,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。第一种,通过ddl进行定义CREATE TABLE `course`...
    99+
    2024-04-02
  • win11怎么创建自动关机任务
    要在Windows 11中创建自动关机任务,可以按照以下步骤操作:1. 打开“设置”应用程序。可以在开始菜单中找到“设置”图标,点击...
    99+
    2023-09-04
    win11
  • Spring AOP与代理类的执行顺序是什么
    本篇内容介绍了“Spring AOP与代理类的执行顺序是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!关于 Spring AO...
    99+
    2023-07-05
  • idea怎么创建spring项目
    要创建一个Spring项目,可以按照以下步骤进行:1. 确保你已经安装了Java开发环境(JDK)和Maven构建工具。如果没有安装...
    99+
    2023-09-21
    spring idea
  • Spring中怎么创建事务
    这篇文章主要介绍了Spring中怎么创建事务,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Spring事务执行原理通过创建一个BeanFactoryTransactionAt...
    99+
    2023-06-14
  • winform怎么用代码动态创建控件
    在WinForm中,可以使用以下代码动态创建控件:1. 创建控件对象:使用控件的构造函数来创建控件对象,例如 `Button but...
    99+
    2023-09-16
    winform
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作