spring-aop前身--【aspectj】面向切面编程 强制使用cglib进行动态代理

看本篇文章之前,必须要了解动态代理的相关知识,
如果不了解,请点击:https://blog.csdn.net/weixin_42275175/article/details/98044391
aspectj是一个Aop组织提供的面向切面编程框架。
使用方法:a:用户自己开发自己的业务类和业务方法
b:用户自己开发自己的增强逻辑,增强逻辑可以卸载一个普通的Advice类中
c:配置一个配置文件,告诉aspectJ,为哪些业务方法增加哪些业务逻辑。
一)手动创建一个Java工程
建成下面的结构层次
在这里插入图片描述
Userservice代码

void deleteUserById(int id);

UserServiceImpl代码

	@Override
	public void deleteUserById(int id) {
		// 模仿mybatis删除用户
		System.out.println("通过id删除用户1");
		System.out.println("通过id删除用户2");

	}

ServiceAdvice代码

	/**
	 * 前置增强的方法 @Title: before @Description: TODO @param @return void @throws
	 */
	public void before() {
		System.out.println("开启事务");
	}

	public void after() {
		System.out.println("提交事务");
	}

二)导入全部jar,我提供的jar比较多,直接导入不考虑
在这里插入图片描述
jar下载地址:链接:https://pan.baidu.com/s/1dfQKsKabzMplKHd3rWrOcg
提取码:pw5b
三)目标:使用aop,生成动态代理对象,先运行前置增强方法 ,在运行原业务类方法, 最后运行:后置增强方法
先配置spring-aop.xml文件
【创建对象,配置aop框架(指定切面实例,具体切面表达式,配置增强)】
a:使用aop创建对象

	<!-- 对象已经创建 -->
	<bean id="UserService" class="com.oracle.aop.service.impl.UserServiceImpl"></bean>
	<bean id="ServiceAdvice" class="com.oracle.zop.advice.ServiceAdvice"></bean>

b:指定aop切面配置,定义一个切面实例

<aop:config>
		<!-- 指定aop切面配置,定义一个切面实例 -->
		<aop:aspect ref="ServiceAdvice">
		<!-- pointcut 具体切面的表达式 -->
			<aop:pointcut expression="execution(* com.oracle.aop.service.impl.*.*(..))" id="serviceCut"/>
			<!-- 配置增强 -->
			<aop:before method="before" pointcut-ref="serviceCut"/>
			<aop:after method="after" pointcut-ref="serviceCut"/>
		</aop:aspect>


	</aop:config>

四)编写一个测试类
在这里插入图片描述

	public static void main(String[] args) {
			//创建ClassPathXmlApplicationContext对象
			ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("spring-aop.xml");
			UserService userService=context.getBean(UserService.class);
			userService.deleteUserById(1);
			
		}

运行代码:当出现下图代表成功
在这里插入图片描述

																					好,开始总结

!!!!!!!!!!!!!!!!!!!!!!前方高能!!!!!!!!!!!!!!!!!!!!!!!!!!
在这里插入图片描述
这时候的userService已经是UserServiceImpl类的一个动态代理对象了
aop的实现过程:当ioc容器在实例化bean的时候,如果该bean满足切面配置,spring的IOC默认会使用jdk的动态代理,
来创建一个动态代理对象,根据切面的增强配置,先进行前置增强,在运行业务类方法,在进行后置增强。


如果原来业务类不实现接口的话,必须要手动指定spring用cglib进行动态代理
一)添加ar
在这里插入图片描述
jar:链接:https://pan.baidu.com/s/110YS8s6SzutkUUb2g5TEDA
二)在spring-aop中强制开启使用cglib进行动态代理

<!-- 强制使用cglib生动态代理 -->
	<aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>

取消掉UserserviceImpl实现UserService
在这里插入图片描述

运行测试。发现就会使用cglib了
在这里插入图片描述
完整项目下载路径
链接:https://pan.baidu.com/s/1futkEQ3Erbipavw359WK1Q
提取码:35jo
复制这段内容后打开百度网盘手机App,操作更方便哦

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值