Spring的核心概念AOP

Spring AOP

面向切面编程

面向切面编程 AOP是软件编程思想发展到一定阶段的产物,是对象面向对象编程的有益补充,简单来说,就是在不改源代码的基础上,增强代码的某些功能(如:日志、异常处理、事务控制等)。

基本概念

切面:一个模块化的横切逻辑,可能会横切多个对象。
连接点:程序执行中的某个具体的执行点。
增强处理:切面在某个特定连接点上执行的代码逻辑。
切入点:对连接点的特征进行描述,可以用正则表达式。增强处理和一个切入点表达式相关联,并在与这个切入点匹配的某个连接点上运行。
目标对象:被一个或多个切面增强的对象。
AOP代理:由AOP框架所创建的对象,实现执行增强处理的方法。
织入:将增强处理连接到应用程序中的类型或对象上的过程。
增强处理类型:前置增强,后置增强,环绕增强,异常抛出增强,最终增强等类型。

所需jar包

aopalliance-1.0.jar
aspectjweaver-1.6.9.jar
spring-aop-3.2.13.RELEASE.jar

import org.aspectj.lang.JoinPoint;
public class UserServiceLogger {

	private static final Logger logger = Logger.getLogger(UserServiceLogger.class);
	//前置增强
	public void before(JoinPoint jp) {
		logger.info("调用"+jp.getTarget()+"的"+jp.getSignature().getName()+"方法.方法入			  参:"+Arrays.toString(jp.getArgs()));

	}

}	

//配置文件
xmlns:aop="http://www.springframework.org/schema/aop"
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
<bean id="dao" class="dao.impl.UserDaoImpl"></bean>
<bean id="service" class="service.impl.UserServiceImpl">
	<property name ="dao" ref="dao"></property>
</bean>
<bean id="theLogger" class="aop.UserServiceLogger"></bean>
<aop:config>
		<!-- 定义一个切入点表达式-->
		<aop:pointcut expression="execution(*cn.smbms.service..*.*(..))" id="serviceMethod"/>
		<!-- 引用包含增强方法的Bean-->
		<aop:aspect ref="theLogger">
			<!--设置前置增强-->
			<aop:before  method="before"  pointcut-ref="pointcut">
			</aop:before>
</aop:config>

以上代码是更写配置文件 实现切面增强功能,但是会发现配置很负责,所以我们有简单的注解写法。

导入所需要的包

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
@Aspect
public class UserServiceLogger {
	private static final Logger logger = Logger.getLogger(UserServiceLogger.class);
	@Pointcut("execution(* service.UserService.*(..))")
	public void pointcut() {
	}
	@Before("execution(* service.UserService.*(..))")
	public void before(JoinPoint jp) {
		logger.info("调用"+jp.getTarget()+"的"+jp.getSignature().getName()+"方法.方法入参:"+Arrays.toString(jp.getArgs()));
	}
	@AfterReturning(pointcut="execution(* service.UserService.*(..))",
					returning="returnValue")
	public void afterReturning(JoinPoint jp,Object returnValue) {
		logger.info("调用"+jp.getTarget()+"的"+jp.getSignature().getName()+"方法的返回值:"+returnValue);

	}
}


//配置xml文件
xmlns:aop="http://www.springframework.org/schema/aop"
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
<context:component-scan base-package="service,dao"/>
<bean class="aop.UserserviceLogger"></bean>
<aop:aspectj-autoproxy>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值