基于Annotation的Spring AOP: @Before

本文详细介绍了如何在Spring框架中集成@AspectJ注解,利用其特性实现面向切面编程(AOP)。通过配置文件和特定的类结构,演示了如何定义切面、切入点以及增强处理,最终在控制台输出验证了AOP的正确实施。

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

AspectJ 允许使用Annotation定义切面、切入点和增强处理,而 Spring框架则可识别并根据这些Annotation来生成AOP代理。Spring只是使用了和AspectJ一样的注解,并没有使用AspectJ的编译器和织入器,底层依然使用的是 Spring AOP,依然是在运行时动态生成AOP代理,并不依赖于AspectJ的编译器或者织入器。

为了启用Spring对@AspectJ切面配置的支持,并保证Spring容器中的目标Bean被一个或多个切面自动增强,必须在配置文件中加如下代码:

<aop:aspectj-autoproxy/>
为了在Spring应用中启动@AspectJ支持,还需要添加 aspectjrt.jaraspectjweaver.jar到工程lib目录下。

Person.java :

public interface Person {
	public String sayHello(String name);
	public void eat(String food);
}
Chinese.java :
@Component
public class Chinese implements Person {

	@Override
	public void eat(String food) {
		System.out.println("我正在吃:"+food);
	}

	@Override
	public String sayHello(String name) {
		return name+"Hello,Spring AOP";
	}

}
BeforeAdviceTest.java :

/**
 * 定义一个切面
 * @author Administrator
 *
 */
@Aspect
public class BeforeAdviceTest {
	
	@Before("execution(* com.bean.*.*(..))")
	public void authority(){
		System.out.println("模拟执行权限检查");
	}
}
bean.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"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xsi:schemaLocation="http://www.springframework.org/schema/beans 
                http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
                http://www.springframework.org/schema/context 
                http://www.springframework.org/schema/context/spring-context-2.5.xsd
                http://www.springframework.org/schema/tx
                http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
                http://www.springframework.org/schema/aop
                http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
    
    
    <context:component-scan base-package="com.bean">
        <context:include-filter type="annotation" 
                 expression="org.aspectj.lang.annotation.Aspect"/>
    </context:component-scan>
    
    <aop:aspectj-autoproxy/>
    
 </beans>
Test.java :

public class Test {
	public static void main(String[] args) {
		
		ApplicationContext ctx=new ClassPathXmlApplicationContext("bean.xml");
		Person p=(Person) ctx.getBean("chinese");
		System.out.println(p.sayHello("张三"));
		p.eat("西瓜");
	}
}
运行控制台输出:





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值