你懂的
package com.meiyoudao.service;
public interface BuyPersonService {
public void buySomebody();
}
package com.meiyoudao.service;
public interface BuyPersonBySexService {
public void buyPersonBySex();
}
package com.meiyoudao.service.impl;
import com.meiyoudao.service.BuyPersonService;
public class BuyPersonServiceImpl implements BuyPersonService {
public void buySomebody(){
System.out.println("Get someone!");
}
}
package com.meiyoudao.service.impl;
import com.meiyoudao.service.BuyPersonBySexService;
public class BuyPersonBySexServiceImpl implements BuyPersonBySexService {
public void buyPersonBySex() {
System.out.println("male!");
}
}
package com.meiyoudao.aop;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.DeclareParents;
import com.meiyoudao.service.BuyPersonBySexService;
import com.meiyoudao.service.impl.BuyPersonBySexServiceImpl;
@Aspect
public class JoinAop {
//将该BuyPersonBySexServiceImpl.class 注入 * .
@DeclareParents(value="*",defaultImpl=BuyPersonBySexServiceImpl.class)
public BuyPersonBySexService buyPerson;
}
<?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:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
<aop:aspectj-autoproxy/>
<bean id="buyPerson" class="com.meiyoudao.service.impl.BuyPersonServiceImpl"/>
<bean class="com.meiyoudao.aop.JoinAop"/>
</beans>
package com.meiyoudao.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.meiyoudao.service.BuyPersonBySexService;
import com.meiyoudao.service.BuyPersonService;
public class BuyPersonTest {
public static void main(String[] args) {
ApplicationContext app = new ClassPathXmlApplicationContext("MyXml.xml");
BuyPersonService buyPerson = (BuyPersonService)app.getBean("buyPerson");
buyPerson.buySomebody();
BuyPersonBySexService buyPersonSex = (BuyPersonBySexService)buyPerson;
buyPersonSex.buyPersonBySex();
}
}
分享到:
相关推荐
AspectJ通过引入切面(Aspect)、通知(Advice)、切点(Pointcut)等概念,使得开发者可以更加灵活地控制程序的行为。切面是关注点的模块化,它封装了一组相关或相互关联的通知。通知是在特定切点执行的代码,例如...
通过这些实例,开发者可以学习到如何使用AspectJ来编写切面,定义切点表达式以精确地指定通知应该在何时何地执行。例如,如何在方法调用前后插入日志记录,如何在抛出异常时进行事务回滚,或者如何实现细粒度的权限...
在《精通AspectJ》的示例代码中,你会看到如何定义和使用这些元素的实例。例如,一个切面可能会定义一个切点,匹配所有带有特定注解的方法,然后在这些方法执行前(前置通知)或执行后(后置通知)插入自定义逻辑。...
它提供了运行时支持,如AOP代理、切面实例化以及通知的执行等。这个库是运行AspectJ应用程序的基础,确保了切面可以在运行时正确地工作。 在Spring AOP中使用AspectJ,你需要配置Spring容器来识别和处理切面。这...
在项目中,这些库的引入使得我们可以利用Spring的AOP功能,并结合AspectJ的强大表达能力,轻松地进行切面编程。 ### 源码分析 通过阅读Spring AOP和AspectJ的源码,可以深入理解其内部工作原理。例如,`...
在这本书中,作者深入浅出地阐述了AspectJ的基本概念和核心特性,包括切面、通知(advice)、连接点(join points)、切入点(pointcuts)以及引入(introductions)。他们通过丰富的实例和实际应用来展示如何利用...
本文将深入探讨AspectJ的使用、框架结构及其应用场景,并通过一个入门实例进行详细解释。 **一、AspectJ简介** AspectJ是一个完整的AOP系统,它扩展了Java语言,引入了新的语法来定义切面和连接点(join points)...
AspectJ通过引入切点(Pointcut)和通知(Advice)来定义切面。切点是程序执行过程中特定的点,如方法调用、异常抛出等;通知则是在这些切点上执行的行为。 在Android中使用AspectJ,首先需要在项目构建系统中集成...
书名直译为“在行动中的AspectJ”,暗示了本书将通过实例和实战来探讨AspectJ的应用。 #### 描述解析 - **Manning.AspectJ.In.Action**:这段描述重申了书名,没有提供额外的信息。但从上下文可以推断出本书的重点...
这个"android 实现AOP 使用Aspect Kotlin版Demo"就是一个实例,展示了如何在Kotlin中利用AspectJ进行AOP编程。 首先,我们要了解AOP的基本概念。面向切面编程的核心在于“切面”和“通知”。切面是关注点的模块化,...
**二、AspectJ的引入** 虽然Spring AOP提供了方便的注解式编程,但有时我们需要更复杂的切入点表达式或者更灵活的控制,这时AspectJ就派上用场了。AspectJ是一个独立的AOP框架,它的切入点表达式更为强大,支持类型...
- **避免过度使用AOP:**过度使用AOP可能会导致系统复杂度增加,应谨慎考虑是否真正需要引入AOP。 - **注意性能影响:**虽然AOP可以提高代码的可维护性和可扩展性,但过度使用可能会对性能产生负面影响。 #### 代码...
AspectJ支持在编译期或运行期注入切面,允许开发者更加精细地控制通知(Advice)的执行时机和位置。与JDK动态代理和CGLIB相比,AspectJ的优势在于它不仅支持方法级别的增强,还可以支持字段级别的增强。 #### 六、...
AspectJ是Java平台上的一个开源AOP框架,它扩展了Java语言,引入了切面、通知和连接点等概念。本篇文章将深入探讨AspectJ中的三个重要关键字:target、this和within,以及它们在定义切面范围时的区别。 首先,我们...
- **引入(Introduction)**:定义一个类型或字段,该类型或字段由其他类型使用,以改变类的行为。 - **织入(Weaving)**:将通知与业务逻辑连接的过程。 #### 三、AspectJ介绍 **1. AspectJ简介** AspectJ是AOP...
1. **引入依赖**: 在项目中,你需要确保已经添加了Spring AOP和AspectJ的相关依赖。通常,这将包括`spring-context`、`spring-aop`和`aspectjrt`、`aspectjweaver`等库。确保这些JAR文件在你的类路径中,或者在Maven...
4. **切入点表达式(Pointcut Expression)**:这是定义切点的语法,使用了AspectJ的表达式语言,可以精确地定位到需要应用通知的代码位置。 5. **代理(Proxy)**:Spring AOP通过动态代理机制创建目标对象的代理...
在Android开发中,AspectJ的引入可以帮助我们解决一些跨组件的问题,例如,我们可以在不修改业务代码的情况下,统一地添加日志记录或异常处理。这使得代码更加整洁,降低了耦合度。 【标签】"aop"代表了面向切面...