您当前的位置:首页 > 互联网教程

aspect java

发布时间:2025-05-21 12:47:29    发布人:远客网络

aspect java

一、aspect java

1、 aspect java是一个面向切面的框架,它扩展了Java语言。AspectJ定义了AOP语法所以它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件。

2、 LTW(加载期织入 load time weave)

3、按照aspectj的语法规则,一个aspect就是很多pointcut和advice的集合,也就是一个*.aj的文件。

4、一个pointcut就是对target class的切入点定义,类似Java class定义中的field。

5、一个advice就是对target class的行为改变,类似Java class中的method。

6、 weave就是aspectj runtime库把aspect织入到target class的行为。

7、 LTW就是指运行期间动态织入aspect的行为,它是相对静态织入行为(包括对源文件、二进制文件的修改)。

8、一般来讲,从运行速度上来说,静态织入比动态织入要快些。因为LTW需要使用aspectj本身的classloader,它的效率要低于jdk的classloader,因此当需要load的class非常多时,就会很慢的。

9、 scenario: Example工程需要使用一个类Line存在于第三方库Line.jar中,但是Line本身没有实现Serializable接口,并且其toString方法输出也不完善。因此这两点都需要修改。

二、java advice

java advice是什么,让我们一起了解一下?

Advice是在Join Point上执行的一个动作或者通知,一般通过拦截器调用。Spring有两大核心,IOC和AOP,在模块AOP里面有个advice。

在Spring-AOP中,增强(Advice)是如何实现的?

按照增强在目标类方法连接点的位置可以将增强划分为以下五类:

前置增强(org.springframework.aop.BeforeAdvice)表示在目标方法执行前来实施增强。

后置增强(org.springframework.aop.AfterReturningAdvice)表示在目标方法执行后来实施增强。

环绕增强(org.aopalliance.intercept.MethodInterceptor)表示在目标方法执行前后同时实施增强。

异常抛出增强(org.springframework.aop.ThrowsAdvice)表示在目标方法抛出异常后来实施增强。

引介增强(org.springframework.aop.introductioninterceptor)表示在目标类中添加一些新的方法和属性。

实战操作:Spring中Advice简单案例

@Configuration//配之类@EnableAspectJAutoProxy//启用AspectJ自动代理@ComponentScan(basePackages = {"spring01","spring02"}) //basePackages指定扫描的包 public class Config {}

@Aspect@Component public class Audience {    /**     * 相当于访问相同报下的不同的类,他们拥有相同的包路径,可以定义一个变量     */    @Pointcut("execution(* spring02.aspect.Performance.perform(..))")    public void performance(){    }     @Before("performance()")    public void silenceCellPhones(){        System.out.println("====表演前将手机调静音");    }     @Before("performance()")    public void takeSeats(){        System.out.println("====表演前就做");    }     @AfterReturning("performance()")    public void applause(){        System.out.println("====表演后鼓掌");    }     @AfterThrowing("performance()")    public void demandRefund(){        System.out.println("====表演失败时退款");    }    @Around("performance()")    public void  watchPerformance(ProceedingJoinPoint point){        try {            System.out.println("====观看前1");            point.proceed();            System.out.println("====观看后2");        } catch (Throwable throwable) {            throwable.printStackTrace();        }    }}

public interface Performance { void perform();}

@Component("performance") public class PerformanceImpl implements Performance{    @Override    public void perform() {        System.out.println("======表演开始=====");    }}

5、测试类@RunWith(SpringJUnit4ClassRunner.class)//启动测试时创建Spring上下文@ContextConfiguration(classes = {Config.class})//配置文件对象 public class TestClass {    @Autowired    private Performance performance;    @Test    public void test(){        performance.perform();    }}

三、什么是aop中的aspect,它有什么用途

AspectJ,是基于Java语言的AOP框架,Spring2.0引入了对其切点表达式的支持。新版本Spring建议使用AspectJ来开发AOP。AspectJ利用JDK5注解功能,允许直接在Bean类中定义切面,如使用@AspectJ注解。Aspect主要用途是自定义开发,实现代码的模块化和解耦,提高代码可维护性。

Aspect的通知类型包括:before(前置通知)、afterReturning(后置通知)、around(环绕通知)、afterThrowing(抛出异常通知)和after(最终通知)。这些类型各有用途和应用场景,例如before用于各种校验,afterReturning用于常规数据处理,around则拥有最大灵活性,可以执行任何操作,而afterThrowing用于处理异常信息,after用于清理资源。

开发时需要导入的jar包包括:aop联盟规范、Spring AOP实现、Aspect规范和Spring Aspect实现。基于XML的Aspect框架操作涉及四个步骤:创建目标接口、实现类、切面类(提供切面方法)、以及在XML中进行配置。通过这些步骤,可以灵活地定义和应用AOP逻辑。

综上所述,Aspect和其通知类型为开发者提供了强大的工具和策略,用于实现面向切面编程(AOP),并提供了对Spring框架的增强功能。这有助于提高代码的组织性、可读性和可维护性,同时减少重复代码的编写。