<aop:scoped-proxy/> 确保长生命周期中依赖的短对象,会即时随着生命周期的结束而销毁
首先看一下Spring文档上的两个例子对比:
<bean id="userPreferences" class="com.foo.UserPreferences" scope="session"/>
<bean id="userManager" class="com.foo.UserManager">
<property name="userPreferences" ref="userPreferences"/>
</bean>
另外一个例子:
<bean id="userPreferences" class="com.foo.UserPreferences" scope="session">
<aop:scoped-proxy/>
</bean>
<bean id="userManager" class="com.foo.UserManager">
<property name="userPreferences" ref="userPreferences"/>
</bean>
前一个例子没有使用<aop:scoped-proxy/>,并且userManager是singleton,所有userManager仅被初始化一次,并且其属性userPreferences也仅被注射一次。当session失效后,userManager仍将保留userPreferences实例。但后一个例子则不一样,userManager的属性userPreferences指向的是com.foo.UserPreferences实例的代理,当session过期后,userManager的属性userPreferences自然也不能再使用。
项目中代码如下:
相关推荐
然而,与有状态会话Bean不同,Web Bean的实例生命周期不由客户端直接控制,而是由Web Bean的范围决定。范围定义了实例的生命周期以及哪些客户端可以共享特定实例的引用。 Web Bean的生命周期由Web Bean管理器管理,...
通过使用`@ManagedProperty`,开发者可以在托管Bean中声明对另一个托管Bean的依赖关系,而无需手动进行查找和设置。这种方式极大地简化了代码结构,提高了可维护性。 综上所述,JSF2.0通过引入各种注解,显著提升了...
总之,WebBeans 作为一种现代的依赖注入框架,为 Java 开发者提供了一种高效、简洁的方式来管理应用程序中的组件依赖关系。通过学习上述概念和实践,开发者可以更好地利用 WebBeans 来构建高质量的企业级应用。
开发者可以利用这些API模拟不同的上下文和依赖关系,以进行单元测试和集成测试。 总的来说,《Pro CDI 2 in Java EE 8》这本书是学习和精通CDI 2.0的宝贵资源,对于想要深入了解Java EE 8开发的程序员来说,它涵盖...
1. **CDI注解**:例如`@Inject`用于注入依赖,`@Named`用于将bean命名以便注入,`@Singleton`、`@RequestScoped`等定义bean的生命周期和范围。 2. **生产者方法(Producer Methods)**:当标准的注解不能满足复杂的...
1. `@ManagedBean`:这个注解用于标记一个类作为JSF管理Bean。例如: ```java @ManagedBean @RequestScoped public class MyBean { // ... } ``` 这里的`MyBean`就是一个被JSF管理的Bean,其作用域为请求。 2. `@...
1. **依赖注入(Dependency Injection, DI)**:允许开发者声明性地定义对象之间的依赖关系,而无需手动创建和管理对象。这降低了代码的耦合度,提高了可测试性和可维护性。 2. **上下文(Contexts)**:CDI可以...
CDI是Java企业级应用程序中的一个关键组件,它提供了一种统一的方式来管理对象(称为bean)以及它们之间的依赖关系。本手册将帮助开发者深入理解WebBeans框架,并学会如何在实际项目中有效利用这一强大的工具。 **1...
Weld作为CDI的核心实现,支持注解驱动的编程模型,允许开发者使用`@Inject`、`@Named`、`@Qualifier`等注解来声明和管理对象之间的依赖。 1. **依赖注入(Dependency Injection, DI)**:DI是WebBeans的核心特性,...
Spring作为容器,负责管理Bean的生命周期和依赖关系。Mybatis-Spring模块提供了一个桥接,使得Spring能够管理和初始化Mybatis的SqlSessionFactory和SqlSessionTemplate,这样就可以在Spring的环境下无缝地使用...
13. SINGLETON (单例)、SCOPED (作用域)、TRANSIENT (瞬态):指的是在Spring等依赖注入容器中管理对象生命周期的不同模式。 14. AUTO-REGISTRATION (自动注册):依赖注入容器自动发现并注册bean。 15. OBJECT LIFE...
- 通过注解(@ManagedBean, @RequestScoped, @SessionScoped等)来定义Bean的生命周期和范围。 5. **依赖注入**: - JSF支持依赖注入(Dependency Injection, DI),可以方便地在Bean之间共享对象。 - CDI...
Spring作为核心容器,管理应用对象的生命周期和依赖关系,通过IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)来解耦组件。在本项目中,Spring管理SessionFactory、...
1. **依赖注入**:通过Spring的DI功能,我们可以更容易地管理JSF应用中的Bean及其依赖关系。 2. **统一配置管理**:Spring允许我们将JSF应用的所有配置集中在一个地方,这有助于简化项目的配置管理。 3. **服务层...
这个技术主要应用于企业级Java应用,特别是Java EE环境中,它提供了一种管理对象(如服务、DAO等)以及它们之间依赖关系的方式。CDI的核心理念是解耦组件,提高代码的可测试性,通过容器来管理对象的生命周期和依赖...
例如,通过Spring的`@ManagedBean`和`@RequestScoped`注解可以创建JSF可访问的bean,同时利用Spring的IoC容器管理这些bean的生命周期和依赖关系。 **Hibernate**是一个流行的Java ORM(对象关系映射)框架,它允许...
Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们各自负责Web应用程序的不同层面:Struts2专注于表现层管理,Spring提供了强大的依赖注入和事务管理,而Hibernate则是持久层的解决方案,负责数据库操作...
5. **Java源代码**:Java源代码中会包含CDI注解,如`@Inject`、`@Named`、`@RequestScoped`等,用来声明依赖关系和定义bean的作用域。 6. **测试**:项目可能包含JUnit测试,用于验证CDI bean的正确行为和依赖注入...