Spring 之高级装配

【环境与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>
原文地址:https://www.cnblogs.com/xkxf/p/7151713.html