使用aspectj的注释方式实现aop
配置:
<context:component-scan base-package="com.aspire.nmp" />
<aop:aspectj-autoproxy proxy-target-class="true"/>
代码:
@Pointcut("bean(testServiceImpl)")
public void testService() {
}
@Around("testService()")
public Object test(ProceedingJoinPoint point) throws Throwable {
System.out.println("testService()");
return point.proceed();
}
spring的bean应该是单例的,但是发现testServiceImpl的构造函数被调用2次,不知是何原理。
将<aop:aspectj-autoproxy proxy-target-class="true"/>替换为<bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator" />
就不会有这个问题
目前还在看源代码,哪位大侠能帮忙解一下?
分享到:
相关推荐
在Spring框架中,Bean的加载顺序是一个重要的概念,它涉及到Spring容器如何管理和初始化Bean的过程。在"spring的bean加载顺序样例项目"中,我们可以通过分析和实验来深入理解这一主题。下面将详细阐述Spring Bean的...
Bean的生命周期包括了Bean的创建、初始化和销毁等过程。依赖注入是指容器将Bean的依赖项注入到Bean中。AOP是指容器提供的面向切面编程功能。 2.3 工程搭建 为了使用Spring框架的容器,我们需要搭建工程环境。工程...
Spring还提供了容器(ApplicationContext)来管理和初始化这些对象。 其次,AspectJ 是一个强大的面向切面编程(AOP)框架,它允许我们在不修改已有代码的情况下,插入新的行为或增强现有功能。在Spring中结合使用...
5. **初始化回调**:Spring 会调用 Bean 的初始化方法,如 init-method 指定的方法。 6. **正常服务**:Bean 准备就绪后,开始提供服务。 7. **销毁回调**:当容器关闭时,Spring 会调用 Bean 的销毁方法,如 ...
总的来说,Spring AOP的源码流程涵盖了从初始化容器到Bean定义的加载和处理,再到动态代理的创建。这个过程确保了切面可以在适当的时间被应用到目标Bean上,实现代码的解耦和模块化。理解这一流程对于深入掌握Spring...
`postProcessAfterInitialization()`方法则在bean初始化完成后调用。在这个阶段,bean已经完成了所有默认的初始化操作,你可以在此时进行进一步的定制,例如为bean添加AOP代理。 Spring框架中内置的一些...
Spring管理的Bean有三种状态:未初始化、初始化中、初始化完成。通过工厂方法、初始化回调、销毁回调等机制,开发者可以自定义Bean的生命周期。 五、Spring MVC Spring MVC是Spring框架的一部分,用于构建Web应用...
- 静态和动态初始化(Static and Dynamic Initialization) #### 2. Pointcuts(切入点) 切入点是一组连接点的集合,用于指定哪些连接点上应用切面逻辑。切入点设计者允许使用逻辑运算符(&&, ||, !)来组合多个...
2.5.3 初始化和销毁Bean 2.6 小结 第3章 高级Bean装配 3.1 声明父Bean和子Bean 3.1.1 抽象基Bean类型 3.1.2 抽象共同属性 3.2 方法注入 3.2.1 基本的方法替换 3.2.2 获取器注入 3.3 注入非Spring Bean ...
在Spring中,我们通过配置文件或者Java配置类来定义Bean,Spring容器负责管理这些Bean的生命周期,包括创建、依赖注入、初始化、使用和销毁。Bean可以通过@Autowired注解自动装配依赖,也可以通过@Qualifier来精确...
前者在bean实例化之前调用,后者在bean初始化之后调用。这两个方法检查当前bean是否匹配任何顾问的切入点,如果匹配,则创建代理。 在实际使用中,通常有两种方式配置`DefaultAdvisorAutoProxyCreator`: 1. XML...
2.7 自定义Bean初始化和析构 72 2.7.1 问题 72 2.7.2 解决方案 72 2.7.3 工作原理 72 2.8 用Java Config简化XML配置 77 2.8.1 问题 77 2.8.2 解决方案 77 2.8.3 工作原理 77 2.9 使Bean感知容器 ...
2.7 自定义Bean初始化和析构 72 2.7.1 问题 72 2.7.2 解决方案 72 2.7.3 工作原理 72 2.8 用Java Config简化XML配置 77 2.8.1 问题 77 2.8.2 解决方案 77 2.8.3 工作原理 77 2.9 使Bean感知容器 ...
Spring容器负责创建Bean、初始化Bean、装配Bean以及管理Bean的整个生命周期。 4. **AOP(Aspect-Oriented Programming,面向切面编程)**:Spring支持AOP,允许开发者定义“切面”,这些切面可以包含业务逻辑以及...
Bean装配涉及Bean的生命周期管理,包括初始化、销毁方法以及属性的设置。 "04-di-annotation"则关注于依赖注入(DI)的注解方式。Spring通过DI来管理对象间的依赖关系,使得代码更加松耦合。注解如@Autowired、@...
3.3.5. 延迟初始化bean 3.3.6. 自动装配(autowire)协作者 3.3.6.1. 设置Bean使自动装配失效 3.3.7. 依赖检查 3.3.8. 方法注入 3.3.8.1. Lookup方法注入 3.3.8.2. 自定义方法的替代方案 3.4. bean的作用域 3.4.1. ...
BeanPostProcessor接口是Spring中实现开闭原则的一个重要工具,允许开发者在Spring容器初始化Bean前后进行自定义操作,增强了框架的可扩展性。作者探讨了如何利用BeanPostProcessor实现特定的业务逻辑,以及在两个...
接着,“tiny-spring-step-2-abstract-beanfactory-and-do-bean-initilizing-in-it.zip”进一步深入,介绍了AbstractBeanFactory和Bean的初始化过程。在这个阶段,你将学习到BeanFactory如何解析XML配置,创建Bean...
3.3.4. 延迟初始化bean 3.3.5. 自动装配(autowire)协作者 3.3.6. 依赖检查 3.3.7. 方法注入 3.4. Bean的作用域 3.4.1. Singleton作用域 3.4.2. Prototype作用域 3.4.3. Singleton beans和prototype-bean的...