创建maven项目:

在pom中添加依赖:

 <dependencies><!-- https://mvnrepository.com/artifact/org.springframework/spring-context --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.3.12.RELEASE</version></dependency><!-- spring aop支持 --><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>4.3.12.RELEASE</version></dependency><!-- aspectj支持 注解的依赖 --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.7</version></dependency></dependencies>

实体类:

package com.test.test2;import org.springframework.stereotype.Component;@Component
public class Client {private String name;private int money;public void maidongxiClient() {// TODO Auto-generated method stubSystem.out.println("2222客户买东西");}public void maiClient() {System.out.println("卖客户2");}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getMoney() {return money;}public void setMoney(int money) {this.money = money;}}

通知类:

package com.test.test2;import java.lang.reflect.Method;import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.springframework.aop.AfterReturningAdvice;
import org.springframework.aop.MethodBeforeAdvice;
import org.springframework.stereotype.Component;//通知对象,实现环绕通知接口
@Component
public class TongZhi implements MethodInterceptor, MethodBeforeAdvice, AfterReturningAdvice {@Overridepublic Object invoke(MethodInvocation invocation) throws Throwable {System.out.println("执行前2");invocation.proceed();// 执行原有逻辑System.out.println("执行后2");return null;}@Overridepublic void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {// TODO Auto-generated method stubSystem.out.println("执行后1");}@Overridepublic void before(Method method, Object[] args, Object target) throws Throwable {// TODO Auto-generated method stubSystem.out.println("执行前1");}}

spring bean xml 配置文件:

<?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:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"><context:component-scan base-package="com.test.test2" /><!-- 代理bean工厂中完成织入 --><bean id="proxy"class="org.springframework.aop.framework.ProxyFactoryBean"><property name="target" ref="client" /><!-- 需要代理的对象,也是spring容器的对象 --><property name="interceptorNames"><list><value>tongZhi</value><!-- 通知对象,Spring容器中的对象,对象需要实现通知类型。 --><!-- 这种方法的缺点:需要代理的对象中,所有的方法都会被代理(无论是否需要代理),都会被代理 --></list></property></bean>
</beans>

调用类:

package com.test.test2;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test4 {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("app2.xml");Client client = (Client) context.getBean("proxy");client.maidongxiClient();client.maiClient();}}

自动代理配置bean xml config:

<?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:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"><context:component-scan base-package="com.test.test2" /><!-- 代理bean工厂中完成织入 --><bean id="proxy"class="org.springframework.aop.framework.ProxyFactoryBean"><property name="target" ref="client" /><!-- 需要代理的对象,也是spring容器的对象 --><property name="interceptorNames"><list><value>Regexp</value><!-- 通知对象,Spring容器中的对象,对象需要实现通知类型。 --><!-- 这种方法的缺点:需要代理的对象中,所有的方法都会被代理(无论是否需要代理),都会被代理 --></list></property></bean><bean id="Regexp" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"><property name="pattern"><value>com.test.test2.Client.maidongxiClient</value><!-- 指定包名,类型,方法名 --></property><property name="advice" ref="tongZhi" /></bean>
</beans>

Spring-aop实现工厂代理与自动代理相关推荐

  1. Spring AOP源码(2)—AspectJAwareAdvisorAutoProxyCreator创建代理对象【两万字】

      基于最新Spring 5.x,介绍了Spring AOP中的AspectJAwareAdvisorAutoProxyCreator自动代理创建者的工作流程,对于创建代理对象的源码进行了深度分析! ...

  2. Spring AOP底层实现原理(动态代理)

    什么是AOP? AOP(面向切面编程)通过预编译的方式 和 运行期动态代理的方式来实现程序功能统一维护的一种方式,是OOP(面向对象编程)的延续.利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业 ...

  3. spring.aop 随笔4 如何借助jdk代理类实现aop

    0. 下了有一个月的雨,这对鼻炎来说来吗?不好 其实这也算6月份的博客,之前一直疏于整理 本文仅关注jdk代理所实现的spring.aop下,两者的关系 完整的aop源码走读请移步相关 spring. ...

  4. Spring AOP源码(1)—<aop:config/>AOP配置标签解析【一万字】

      基于最新Spring 5.x,对Spring AOP中的<aop:config/>标签的解析源码进行了详细分析,这是Spring AOP源码的入口!   此前我们已经详细学习了Spri ...

  5. Spring AOP(一)——基础概念

    前文的一些内容更多是针对Spring容器内部的一些特性的描述,接下来一个专题将描述Spring AOP的一些信息,配置细节等等. 介绍 面向切面编程(AOP)是一种新的针对程序结构的思路,它补足了面向 ...

  6. 从代理机制到Spring AOP

    这篇文章准备从Java的代理机制讲到Spring的AOP. 1.代理模式 代理模式是很常见的一种设计模式,代理一词拆开来看就是代为受理,那显然是要涉及到请求被代理的委托方,提供代理的代理方,以及想要通 ...

  7. 从代理机制到Spring AOP,这篇给你安排的明明白白的

    这篇文章准备从Java的代理机制讲到Spring的AOP. 1.代理模式 代理模式是很常见的一种设计模式,代理一词拆开来看就是代为受理,那显然是要涉及到请求被代理的委托方,提供代理的代理方,以及想要通 ...

  8. 设计模式:代理模式是什么,Spring AOP还和它有关系?

    接着学习设计模式系列,今天讲解的是代理模式. 定义 什么是代理模式? 代理模式,也叫委托模式,其定义是给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用.它包含了三个角色: Subject: ...

  9. Spring AOP源码解析——AOP动态代理原理和实现方式

    2019独角兽企业重金招聘Python工程师标准>>> Spring介绍 Spring(http://spring.io/)是一个轻量级的Java 开发框架,同时也是轻量级的IoC和 ...

最新文章

  1. 被鹤岗买房鼓励,我带上6万来到另一小城
  2. python生成表格文件_python读取和生成excel文件
  3. QT的Q3DScatter类的使用
  4. linux 进程组id 错乱,【Linux】终端,进程组,作业,会话及作业控制
  5. java web access_Java Web项目中连接Access数据库的配置方法
  6. SpringBoot项目部分文件解析、数据库连接(idea)
  7. git中如何提交空目录
  8. 易筋SpringBoot 2.1 | 第三十六篇:Spring Boot RestTemplate超时配置示例
  9. 专业邮件群发软件,助您轻松邮件营销
  10. 2014年domino学习小结
  11. JPEG 图片存储格式与元数据解析
  12. 怎么给边框添加图片 css3,用CSS3轻松实现图片边框
  13. 【话题:工作生活】2021年工作总结--这些人,那些事。
  14. 【Struck】论文阅读笔记
  15. Linux pwd命令:显示当前工作目录。
  16. 模拟Android多点触控
  17. Python学习笔记--day09 函数 模块 (文件、路径操作)
  18. 九、python学习之HTTP协议
  19. 《变量:大国的腾挪》摘记
  20. 《移动APP测试实战》学习笔记

热门文章

  1. 视频教程-黑客基础——爬虫(从理论剖析到实战演练)-大数据
  2. 线段的逆时针方向(顺时针、正上方、正下方、线段上)、相交判断(图解)
  3. OA软件厂商的综合素质到底有多重要?
  4. 区块链与联邦学习的研究
  5. 如何做英文SEO、如何做英文外链
  6. 游戏脚本引色粉,无脑圈钱攻略
  7. 【练习题】python集合练习
  8. SBW(线控转向系统转向盘子系统Matlab/Simulink模型搭建)
  9. 数学基础知识总结 —— 11. 什么是泰勒公式与泰勒级数
  10. vue2封装Affix组件实现固定