博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring——Spring中的AOP实现
阅读量:3940 次
发布时间:2019-05-24

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

Spring——Spring中的AOP实现

编写业务层接口

package com.muhan.service;//service层接口public interface UserService {
void add(); void delete(); void update(); void query();}

编写业务层实现类

package com.muhan.service;//service实现类public class UserServiceImpl implements UserService {
public void add() {
System.out.println("增加了一条用户数据"); } public void delete() {
System.out.println("删除了一条用户数据"); } public void update() {
System.out.println("更新了一条用户数据"); } public void query() {
System.out.println("查询了一条用户数据"); }}

定义日志增加类实现

package com.muhan.log;import org.springframework.aop.MethodBeforeAdvice;import java.lang.reflect.Method;//日志类public class Log implements MethodBeforeAdvice {
/* method:要执行的目标对象的方法 objects:要调用的方法的参数 o:目标对象 */ public void before(Method method, Object[] objects, Object o) throws Throwable {
System.out.println(o.getClass().getName()+"的" +method.getName()+"方法被执行了"); }}
package com.muhan.log;import org.springframework.aop.AfterReturningAdvice;import java.lang.reflect.Method;//日志之前public class AfterLog implements AfterReturningAdvice {
/* o:返回值 method:被调用的方法 objects:被调用方法的参数 o1:被调用的目标对象 */ public void afterReturning(Object o, Method method, Object[] objects, Object o1) throws Throwable {
System.out.println(o1.getClass().getName()+"的" +method.getName()+"方法被执行了,返回值为:"+o); }}

需要导入aop的织入包

https://mvnrepository.com/artifact/org.aspectj/aspectjweaver/1.8.9

org.aspectj
aspectjweaver
1.8.9

编写Spring核心配置文件

测试

import com.muhan.service.UserService;import org.junit.Test;import org.springframework.context.support.ClassPathXmlApplicationContext;public class AopTest {
@Test public void test(){
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("aop.xml"); UserService service = (UserService) context.getBean("userService"); /* spring调用的真实对象是userService 在暗箱中:动态的修改userService,在方法的前后或者其他通知的地方增加了我们切入的代码 这样我们就可以实现只调用原来的对象,产生增加新的业务的功能 */ service.add(); }}

结果展示

在这里插入图片描述

AOP总结:

  • AOP的本质就是动态代理
  • AOP的底层实现机制就是横向编程
  • 使用AOP的时候别忘记了导入一个包,进行aop植入的包:aspectjweaver
  • 使用的时候千万别遗忘了切面
  • 三种实现AOP的方法:使用SpringAPI来实现,使用自定义类来实现,使用注解实现

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

你可能感兴趣的文章
创建新项目
查看>>
印刷工艺- 喷墨印刷
查看>>
印刷工艺流程
查看>>
印刷业ERP启蒙
查看>>
Java8 Lambda表达式使用集合(笔记)
查看>>
Java魔法师Unsafe
查看>>
spring cloud java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletRequest
查看>>
Centos系统安装MySQL(整理)
查看>>
postgresql计算两点距离(经纬度地理位置)
查看>>
postgres多边形存储--解决 Points of LinearRing do not form a closed linestring
查看>>
postgresql+postgis空间数据库总结
查看>>
spring 之 Http Cache 和 Etag(转)
查看>>
基于Lucene查询原理分析Elasticsearch的性能(转)
查看>>
HttpClient请求外部服务器NoHttpResponseException
查看>>
springCloud升级到Finchley.RELEASE,SpringBoot升级到2.0.4
查看>>
Spring boot + Arthas
查看>>
omitted for duplicate jar包冲突排查
查看>>
如何保证缓存与数据库的双写一致性?
查看>>
java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy排查
查看>>
深浅拷贝,深浅克隆clone
查看>>