【环境与Profile】
暂略
【条件化的bean】
暂略
【处理自动装配歧义性】
暂略
【 bean 的作用域】
在 @Componen 、 @Bean 下以及 XML 中的声明方式如下所示,
@Component("LonelyHeartsClub") @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) // Singleton 作用域是默认的,Prototype 作用域需要特别声明,每次注入都会创建一个新的 Bean 实例 public class SgtPeppers implements CompactDisc {}
@Bean @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) public CompactDisc compactDisc() { return new SgtPeppers(); }
<bean id="compactDisc" class="soundsystem.bean.BlankDisc" scope="prototype" c:_0="..." c:_1="...."> <constructor-arg> <list> <value>...</value> <value>....</value> </list> </constructor-arg> </bean>
需要注意的是, 声明 Session 作用域和 Request 作用域必须先在 web.xml 中添加如下 listener
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <listener> <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> </listener> </web-app>
代理模式需要根据 bean 对应的是接口还是具体类而改动。
@Component @Scope(value = WebApplicationContext.SCOPE_SESSION, proxyMode = ScopedProxyMode.INTERFACES ) public class BlankDisc implements CompactDisc { } // @Bean 下的声明类似
<bean id="cart" class="shopping.ShoppingCart" scope="session"> <aop:scoped-proxy proxy-target-class="false"/> </bean>
时间: 2024-10-29 19:06:58