• Spring学习总结之高级装配


    1.  profile

    profile可以决定bean在什么环境下才被装配(开发环境、测试环境、线上环境等)

    @Profile(“dev”)可以用在class之前,也可以用在类之前(Spring3.2),表示类或者方法返回类只有在dev环境激活时才被创建;也可以在XML文件中配置。

    激活profile:作为DispatcherServelet的初始化参数

                                 作为web应用的上下文参数

                                 作为JNDI条目

                                 作为环境变量

                                 作为JVM的系统属性

                                 在集成测试类上,使用@ActiveProfile注解设置

    2.  条件化的Bean

    @Conditional(条件),如果条件为true,就创建bean,否则就不创建

    3.  自动装配歧义性

    在自动装配时,一个接口可能有多个实现类,spring并不知道该装配哪一个bean,因此产生了歧义性

    1)@Primary注解,与@Component或者@Bean组合使用,设置首选bean,当有歧义时,首选@Primary注解的bean,但是有多个首选bean时,同样会有歧义性

    2)限定符@Qualifier,可与@Component或@Bean组合使用,限定符限制了装配的bean,装配的bean也必须有对应的限定符

    4.  bean的作用域

    1)  单例(Singleton):在整个应用中只创建bean的一个实例

    默认作用域

    2)  原型(Prototype):每次注入或者通过Spring应用上下文获取的时候,都会创建一个新的bean实例

    @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) 或者

    XML中,bean标签添加scope=”prototype”

    3)  会话(Session):在Web应用中,为每个会话创建一个bean实例

    @Scope(value=WebApplicationContext.SCOPE_SESSION,proxyMode=ScopeProxyMode.INTERFACES)

    例子:购物网站购物车,对于每一个用户的一次会话购物车是共用的,但是不同用户不同会话的购物车是不同的,会话作用域的bean就能够解决这种问题

    关于proxyMode,作用域代理,可以延迟注入请求和会话作用域的bean,在注入时,会注入一个bean的代理,代理会暴露与bean相同的方法,当需要调用bean的方法时,由代理进行懒解析并调用委托给会话作用域内的bean

    4)  请求(Request):在Web应用中,为每个请求创建一个bean实例

    使用XML配置会话或请求作用域代理,使用aop命名空间的元素,如下:

    <aop:scoped-proxy />,此时默认是使用CGLib创建目标类的代理,如果要创建目标借口的代理,需要添加proxy-target-class=”false”

    5.  运行时植入

    1)  属性占位符

    格式:${…},另外需要在XML中配置<context:property-placeholder />

    2)  Spring表达式语言

    格式:#{…}

    使用bean的ID来引用bean;调用方法和访问对象的属性;对值进行算术、关系和逻辑运算;正则表达式匹配;集合操作

  • 相关阅读:
    the process cannot access the file because it is being used by another process
    SharePoint 2013: The "New Web Application" button is disabled is the central administration
    【转】Windows按键消息—虚拟键码
    【转】windows消息16进制对应表
    C#将图片字节流转为Base64直接放入html的img标签src属性中
    WPF自定义Main函数
    c#geckofx文件流下载
    腾讯RTX登录提示失败问题及处理办法
    C# \u8888类型的unicode转换为字符串方法
    C#System.Net.Mail采用简单邮件传输协议发送邮件
  • 原文地址:https://www.cnblogs.com/songxh-scse/p/6692267.html
Copyright © 2020-2023  润新知