Spring_day02_9(Spring中AOP的入门)

本文详细介绍如何在Spring框架中实现AOP(面向切面编程),包括创建项目、引入依赖、配置切面类及通知类型等步骤,并针对不同业务场景提供具体的配置示例。
AOP入门
1.创建WEB项目和引入JAR包
引入基本的Jar包
引入AOP的包


2.引入Spring配置文件
引入命名空间
        xmlns:aop="http://www.springframework.org/schema/aop"
    	xsi:schemaLocation="
        http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop.xsd
3.创建切面类
/*
 * 切面类
 * 存放着 前后通知的方法
 */
public class MyAspect {
	public void myBefore(){
		System.out.println("前置通知---------");
	}
	public void myAfter(){
		System.out.println("后置通知---------");
	}
}


4.完善application_context.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:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop.xsd
        ">
        <!-- 将将要增强的类交给Spring管理 -->
        <bean id="productDao" class="spring4_aop.ProductDaoImpl"></bean>
        
        <!-- 将切面类交给Spring管理-->
        <bean id="myAspect" class="spring4_aop.MyAspect"></bean>
        
        <!-- 通过AOP的配置完成对目标类 产生代理 -->
		<aop:config>
			<!-- 配置切点 -->
			<aop:pointcut expression="execution(* spring4_aop.ProductDaoImpl.add())" id="mypoint"/>
			<!-- 配置切面类 -->
			<aop:aspect ref="myAspect">
				<aop:before method="myBefore" pointcut-ref="mypoint"/>
				<aop:after method="myAfter" pointcut-ref="mypoint"/>
			</aop:aspect>
		</aop:config>
</beans>


5.编写测试类

public class Test {


	public static void main(String[] args) {
		ApplicationContext ac = new ClassPathXmlApplicationContext("application_context.xml");
		ProductDao productDao = (ProductDao) ac.getBean("productDao");//不能使用getBean("id",Class class);
		productDao.add();
	}


}
Spring通知的类型
1.前置通知:在目标方法执行之前执行操作
	 <aop:aspect ref="myAspect">
		<aop:before method="myBefore" pointcut-ref="mypoint"/>
	</aop:aspect>
2.后置通知:在目标方法执行之后执行操作

不带返回值的后置通知:

	    <aop:aspect ref="myAspect">
			<aop:after method="myAfter" pointcut-ref="mypoint"/>
	     </aop:aspect>

带返回值的后置通知:
切点方法:
		public String delete() {
			System.out.println("delete 方法执行了");
			return "刘波";
		}

切点配置:
<aop:config>
	<aop:pointcut expression="execution(* spring4_aop.ProductDaoImpl.delete(..))"  id="mypoint1" />
	<aop:aspect ref="myAspect">
	    <aop:after-returning method="myAfterReturn" pointcut-ref="mypoint1"  returning="result"/>
	</aop:aspect>
</aop:config>
后置通知方法编写:
public class MyAspect {
	public void myAfterReturn(Object result){
		System.out.println("这是带返回值的 环绕通知------"+result);
	}
}

3.环绕通知:在目标方法执行之前和执行之后执行
可以阻止目标的方法的执行。
   <aop:config>
	  <aop:pointcut expression="execution(* spring4_aop.ProductDaoImpl.find(..))"  id="mypoint2"/>
	  <aop:aspect ref="myAspect">
		<aop:around method="myAround" pointcut-ref="mypoint2"/>
	  </aop:aspect>
   </aop:config>


切点通知:
	public Object myAround(ProceedingJoinPoint joinPoint) throws Throwable{
		System.out.println("这是环绕前的通知--------");
		// 执行目标程序
		Object obj = joinPoint.proceed();
		System.out.println("这是环绕后的通知--------");
		return obj;
	   }




4.异常通知:在程序出现异常的时候执行
切点方法:
	 public void update() {
		int avg = 234/0;故意制造错误
		System.out.println("update方法执行了");
	}


application_context.xml文件的配置
	<aop:config>
		<aop:pointcut expression="execution(* spring4_aop.ProductDaoImpl.update(..))" id="mypoint3"/>
		<!-- 配置切面类 -->
		<aop:aspect ref="myAspect">
			<aop:after-throwing method="myThrowing" pointcut-ref="mypoint3" throwing="error"/>
		</aop:aspect>
		<!-- 配置切面类1 -->
	</aop:config>

5.最终通知:无论代码是否有异常,这段代码都会被执行

<?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:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop.xsd
        ">
        <!-- 配置增强类 -->
        <bean id="productDao" class="spring4_aop.ProductDaoImpl"></bean>
        
        <!-- 将切面类交给Spring管理-->
        <bean id="myAspect" class="spring4_aop.MyAspect"></bean>
        
        <!-- 通过AOP的配置完成对目标类 产生代理 -->
		<aop:config>
			<aop:pointcut expression="execution(* spring4_aop.ProductDaoImpl.add())" id="mypoint" />
			<aop:pointcut expression="execution(* spring4_aop.ProductDaoImpl.delete(..))" id="mypoint1" />
			<aop:pointcut expression="execution(* spring4_aop.ProductDaoImpl.find(..))" id="mypoint2"/>
			<aop:pointcut expression="execution(* spring4_aop.ProductDaoImpl.update(..))" id="mypoint3"/>
			<!-- 配置切面类 -->
			<aop:aspect ref="myAspect">
				<aop:before method="myBefore" pointcut-ref="mypoint"/>
				<aop:after method="myAfter" pointcut-ref="mypoint"/>
				<aop:after-returning method="myAfterReturn" pointcut-ref="mypoint1" returning="result"/>
				<aop:around method="myAround" pointcut-ref="mypoint2"/>
				<aop:after-throwing method="myThrowing" pointcut-ref="mypoint3" throwing="error"/>
			</aop:aspect>
			<!-- 配置切面类1 -->
		</aop:config>
</beans>


基于STM32 F4的永磁同步电机无位置传感器控制策略研究内容概要:本文围绕基于STM32 F4的永磁同步电机(PMSM)无位置传感器控制策略展开研究,重点探讨在不依赖物理位置传感器的情况下,如何通过算法实现对电机转子位置和速度的精确估计与控制。文中结合嵌入式开发平台STM32 F4,采用如滑模观测器、扩展卡尔曼滤波或高频注入法等先进观测技术,实现对电机反电动势或磁链的估算,进而完成无传感器矢量控制(FOC)。同时,研究涵盖系统建模、控制算法设计、仿真验证(可能使用Simulink)以及在STM32硬件平台上的代码实现与调试,旨在提高电机控制系统的可靠性、降低成本并增强环境适应性。; 适合人群:具备一定电力电子、自动控制理论基础和嵌入式开发经验的电气工程、自动化及相关专业的研究生、科研人员及从事电机驱动开发的工程师。; 使用场景及目标:①掌握永磁同步电机无位置传感器控制的核心原理与实现方法;②学习如何在STM32平台上进行电机控制算法的移植与优化;③为开发高性能、低成本的电机驱动系统提供技术参考与实践指导。; 阅读建议:建议读者结合文中提到的控制理论、仿真模型与实际代码实现进行系统学习,有条件者应在实验平台上进行验证,重点关注观测器设计、参数整定及系统稳定性分析等关键环节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值