Spring AOP实操总结

本文总结了Spring AOP的概念,包括切面(Aspect)、切入点(Pointcut)和通知(Advice)。通过注解定义了不同类型的Advice:前置、后置、最终、异常和环绕通知,并以打印机为例,设计了Ink、Paper接口及其实现,以及Printer类和ShowPrinterInfoAspect切面类。最后,展示了如何在Boss类中调用,并在applicationContext.xml配置文件中配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AOP:(Aspect-oriented-Programming,面向切面编程)
与AOP相关的名词:

  • Aspect:切面
  • Pointcut:切入点
  • Advice:通知

使用注解定义通知类型:

  • @Before:前置通知
  • @AfterReturning:后置通知
  • @After:最终通知
  • @AfterThrowing:异常通知
  • @Around:环绕通知

本次我采用打印机为例子:
有两个接口:Ink和Paper类

  • Ink下有彩印 ColorInk 和黑白 BlackInk 两种打印方式
  • paper下有A4Paper 和 B5Paper 两种类型
  • 编写一个Printer类,里面封住了Ink 和 Paper类型以及自定义的打印机字符串String类型
  • ShowPrinterInfoAspect就是用来演示切面的类
  • Boss:main方法

pom.xml文件中要下载切面的jar包:

<dependency>
  <groupId>org.aspectj</groupId>
  <artifactId>aspectjrt</artifactId>
  <version>1.6.11</version>
</dependency>

<dependency>
  <groupId>org.aspectj</groupId>
  <artifactId>aspectjweaver</artifactId>
  <version>1.6.11</version>
</dependency>

Ink 接口:

public interface Ink {
	public String getColor();
}

BlackInk:

public class BlackInk  implements Ink{
  @Override
  public String getColor() {
	    return "黑白";
	}
}

ColorInk:

@Component("ink")
public class ColorInk implements Ink {
	@Override
 public String getColor() {
    	return "彩色";
	}
}

Paper接口:

public interface Paper {
	public  String getSize();
}

A4Paper:

@Component("paper")
public class A4Paper implements Paper {
 @Override
 public String getSize() {
    	return "A4";
	}
}

B5Paper:

public class B5Paper implements Paper {
	@Override
	public String getSize() {
    	return "B5";
	}
}

Printer:

//@Component
public class Printer {
//    @Value("惠普")
private String kind;
@Autowired
//    @Qualifier("paper")
private Paper paper;
@Autowired
//    @Qualifier("ink")
private Ink ink;

public Printer(String kind) {
    this.kind = kind;
}

public String getKind() {
    return kind;
}

//    public void setKind(String kind) {
//        this.kind = kind;
//    }

public Paper getPaper() {
    return paper;
}

public void setPaper(Paper paper) {
    this.paper = paper;
}

public Ink getInk() {
    return ink;
}

public void setInk(Ink ink) {
    this.ink = ink;
}

    public void print(){
        System.out.println("hello");
//        System.out.println(kind+"打印机正在使用"+ink.getColor()+"墨盒"+paper.getSize()+"纸打印。。。");
}
}

ShowPrinterInfoAspect:

@Aspect
@Component
public class ShowPrinterInfoAspect {
@Autowired
Printer printer;

@Before("execution(* org.lanqiao.printer.Printer.print(..))")
public void ShowInfo(){
    System.out.println(printer.getKind()+"打印机正在使用"+printer.getInk().getColor()+"墨盒"+printer.getPaper().getSize()+"纸打印。。。");
//        System.out.println("dayin");
}
}

Boss:

public class Boss {
public static void main(String[] args) {
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    Printer printer = context.getBean("printer",Printer.class);
    printer.print();
}
}

applicationContext.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:context="http://www.springframework.org/schema/context"
   xmlns:aop="http://www.springframework.org/schema/aop"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
  http://www.springframework.org/schema/context
  http://www.springframework.org/schema/context/spring-context.xsd
  http://www.springframework.org/schema/aop
  http://www.springframework.org/schema/aop/spring-aop.xsd">
<bean id="printer" class="org.lanqiao.printer.Printer" >
    <constructor-arg value="惠普"></constructor-arg>
</bean>
<context:component-scan base-package="org.lanqiao.printer"></context:component-scan>

<aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>
</beans>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值