博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring自学日志06(Aop)
阅读量:3948 次
发布时间:2019-05-24

本文共 3547 字,大约阅读时间需要 11 分钟。

什么是AOP

面向切面编程,通过预编译的方式和运行期动态代理实现程序功能的同一维护的技术。

利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

AOP在Spring中的作用

提供声明式事务:允许用户自定义切面。

1:代理(proxy)向目标对象应用通知之后创建的对象。
2:切入点(PointCut)切面执行的“地点”的定义。
3:连接点(JointPoint)与切入点匹配的执行点。
4:目标(Target)被通知的对象
5:通知(Advice)切面必须完成的工作。即,他是类中的一个方法。
6:切面(Aspect)横切关注点被模块化的特殊对象。即,他是一个类。

用Spring接口实现AOP

首先导入依赖包

compile group: 'org.aspectj', name: 'aspectjweaver', version: '1.9.5'
org.aspectj
aspectjweaver
1.9.4

环境搭建

UserService

package com.Service;public interface UserService {
public void add(); public void delete(); public void updata(); public void select();}

UserServiceImpl

package com.Service;public class UserServiceImpl implements UserService{
@Override public void add() {
System.out.println("增加了一个用户"); } @Override public void delete() {
System.out.println("删除了一个用户"); } @Override public void updata() {
System.out.println("修改了一个用户"); } @Override public void select() {
System.out.println("查找了一个用户"); }}

log

package com.log;import org.springframework.aop.MethodBeforeAdvice;import java.lang.reflect.Method;public class log implements MethodBeforeAdvice {
//method:执行目标对象的方法 //Object:参数 //target:参数对象 @Override public void before(Method method, Object[] args, Object target) throws Throwable {
System.out.println(target.getClass()+"的"+method.getName()+"被执行了"); }}

Afterlog

package com.log;import org.springframework.aop.AfterReturningAdvice;import java.lang.reflect.Method;public class Afterlog implements AfterReturningAdvice {
//returnValue返回值 @Override public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {
System.out.println("执行了"+method.getName()+"方法,返回值为"+returnValue); }}

applicationContext.xml

使用自定义类实现AOP

定义一个类

DiyPoiunt

package com.csm;public class DiyPoiunt {
public void before(){
System.out.println("===方法执行前==="); } public void after(){
System.out.println("===方法执行后==="); }}

重写applicationContext.xml

<--自定义类-->

注解实现AOP

定义一个类AnnotationPointCut

package com.csm;import org.aspectj.lang.annotation.After;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.springframework.context.annotation.Scope;import org.springframework.stereotype.Component;import org.springframework.stereotype.Service;//使用注解实现Aop@Aspect//标记该类为一个切面public class AnnotationPointCut {
@Before("execution(* com.Service.UserServiceImpl.*(..))") public void before(){
System.out.println("===方法执行前==="); } @After("execution(* com.Service.UserServiceImpl.*(..))") public void after(){
System.out.println("===方法执行后==="); } @Around("execution(* com.kuang.service.UserServiceImpl.*(..))") public void around(ProceedingJoinPoint jp) throws Throwable {
System.out.println("环绕前"); System.out.println("签名:"+jp.getSignature()); //执行目标方法proceed Object proceed = jp.proceed(); System.out.println("环绕后"); System.out.println(proceed); }}

重写applicationContext.xml

转载地址:http://jlrwi.baihongyu.com/

你可能感兴趣的文章
如何在JNI中抛异常
查看>>
Android应用程序的完全退出
查看>>
Task和Activity相关的一些属性
查看>>
JAVA系统属性之user.home
查看>>
Android代码截屏
查看>>
Android中打印代码的调用层次
查看>>
成功者十三个价值连城的习惯
查看>>
特别成功的人会做6件事
查看>>
Android: 用jni 获取MAC地址
查看>>
字符串列表的C语言实现:c_strlist
查看>>
客户沟通的方式:礼貌待客沟通方式,技巧推广沟通方式,个性服务沟通方式
查看>>
用弹性工作制留住员工
查看>>
知识=经验×反思2
查看>>
领导者如何发现关键问题
查看>>
学习无为领导力
查看>>
卓越领导看过程
查看>>
领导力与各种循环挑战
查看>>
达成谈判协议 - 避免操之过急
查看>>
销售人说话“十大忌”
查看>>
营销中的“战略非对称”
查看>>