Spring-aop实现工厂代理与自动代理
创建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实现工厂代理与自动代理相关推荐
- Spring AOP源码(2)—AspectJAwareAdvisorAutoProxyCreator创建代理对象【两万字】
基于最新Spring 5.x,介绍了Spring AOP中的AspectJAwareAdvisorAutoProxyCreator自动代理创建者的工作流程,对于创建代理对象的源码进行了深度分析! ...
- Spring AOP底层实现原理(动态代理)
什么是AOP? AOP(面向切面编程)通过预编译的方式 和 运行期动态代理的方式来实现程序功能统一维护的一种方式,是OOP(面向对象编程)的延续.利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业 ...
- spring.aop 随笔4 如何借助jdk代理类实现aop
0. 下了有一个月的雨,这对鼻炎来说来吗?不好 其实这也算6月份的博客,之前一直疏于整理 本文仅关注jdk代理所实现的spring.aop下,两者的关系 完整的aop源码走读请移步相关 spring. ...
- Spring AOP源码(1)—<aop:config/>AOP配置标签解析【一万字】
基于最新Spring 5.x,对Spring AOP中的<aop:config/>标签的解析源码进行了详细分析,这是Spring AOP源码的入口! 此前我们已经详细学习了Spri ...
- Spring AOP(一)——基础概念
前文的一些内容更多是针对Spring容器内部的一些特性的描述,接下来一个专题将描述Spring AOP的一些信息,配置细节等等. 介绍 面向切面编程(AOP)是一种新的针对程序结构的思路,它补足了面向 ...
- 从代理机制到Spring AOP
这篇文章准备从Java的代理机制讲到Spring的AOP. 1.代理模式 代理模式是很常见的一种设计模式,代理一词拆开来看就是代为受理,那显然是要涉及到请求被代理的委托方,提供代理的代理方,以及想要通 ...
- 从代理机制到Spring AOP,这篇给你安排的明明白白的
这篇文章准备从Java的代理机制讲到Spring的AOP. 1.代理模式 代理模式是很常见的一种设计模式,代理一词拆开来看就是代为受理,那显然是要涉及到请求被代理的委托方,提供代理的代理方,以及想要通 ...
- 设计模式:代理模式是什么,Spring AOP还和它有关系?
接着学习设计模式系列,今天讲解的是代理模式. 定义 什么是代理模式? 代理模式,也叫委托模式,其定义是给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用.它包含了三个角色: Subject: ...
- Spring AOP源码解析——AOP动态代理原理和实现方式
2019独角兽企业重金招聘Python工程师标准>>> Spring介绍 Spring(http://spring.io/)是一个轻量级的Java 开发框架,同时也是轻量级的IoC和 ...
最新文章
- 被鹤岗买房鼓励,我带上6万来到另一小城
- python生成表格文件_python读取和生成excel文件
- QT的Q3DScatter类的使用
- linux 进程组id 错乱,【Linux】终端,进程组,作业,会话及作业控制
- java web access_Java Web项目中连接Access数据库的配置方法
- SpringBoot项目部分文件解析、数据库连接(idea)
- git中如何提交空目录
- 易筋SpringBoot 2.1 | 第三十六篇:Spring Boot RestTemplate超时配置示例
- 专业邮件群发软件,助您轻松邮件营销
- 2014年domino学习小结
- JPEG 图片存储格式与元数据解析
- 怎么给边框添加图片 css3,用CSS3轻松实现图片边框
- 【话题:工作生活】2021年工作总结--这些人,那些事。
- 【Struck】论文阅读笔记
- Linux pwd命令:显示当前工作目录。
- 模拟Android多点触控
- Python学习笔记--day09 函数 模块 (文件、路径操作)
- 九、python学习之HTTP协议
- 《变量:大国的腾挪》摘记
- 《移动APP测试实战》学习笔记