zoukankan      html  css  js  c++  java
  • spring bean 配置

    这篇文章类似spring文档,随时查阅(3.X)

       

    spring框架自带10个命名空间:

    1. aop:为声明切面以及将@AspectJ注解的类代理为Spring切面提供了配置元素
    2. beans:支持声明Bean和装配Bean,是Spring最核心也是最原始的命名空间
    3. context:为配置Spring应用上下文提供了配置元素,包括自动检测和自动装配Bean,注入非Spring直接管理的对象;
    4. tx:提供声明式事务配置
    5. mvc:启用SpringMVC的能力,例如面向注解的控制器,视图控制器和拦截器
    6. jee:提供了与JavaEE API的集成,例如JNDI和EJB
    7. jms:为声明消息驱动的POJO提供了配置元素
    8. lang:支持配置由Groovy,JRuby或BeanShell等脚步实现的Bean
    9. oxm:支持Spring的对象到XML映射配置
    10. util:提供各种各样的工具类元素,包括把集合配置为Bean,支持属性占位符元素

    bean:

      bean是beans下的;bean的属性:

      id:唯一标示该bean的标识符;

      name:作用和id一样,但由于使用XML(XML自带id属性),建议使用id

      factory-bean:指明该对象由那个beanFactory创建

      factory-method:指明创建该对象的方法

      scope:指明bean的作用域:

          singleton:在每一个Spring容器中,一个bean只有一个对象实例

          prototype:允许Bean的定义可以被实例化任意次(每次调用都创建一个实例)

          request:在一次HTTP请求中,每个Bean对应一个实例,该作用域仅在基于Web的Spring上下文(例如springMVC中有效)

          session:跟request类似,在一个HTTP Session中....

          global-session:在一个全局的HTTP Session中,每一个Bean定义对应一个实例,该作用域仅在Portlet上下文中才有效

      init-method:在Bean初始化完成后调用该方法

      destory-method:在Bean销毁前调用该方法

      autowire:自动装配bean

          byName:把与Bean的属性具有相同名字(或者ID)的其他Bean自动装配到Bean的对应属性中,如果没有,则该属性不进行装配

          byType:把与Bean的属性具有相同类型的其他Bean自动装配到Bean对应属性中,如果没有,则该属性不进行装配

          constructor:把与Bean的构造器入参具有相同类型的其他Bean自动装配到Bean构造器的对应入参中

          autodetect:首先尝试使用constructor进行自动装配,如果失败,再尝试使用byType

      bean下标签:

      property:name; value or ref(属性值和引用)(setting注入)

      constructor-arg:name; value or ref(属性值和引用)(构造器注入)

      (上述注入还可以为集合:

        <list>:装配list类型的值,允许重复

        <set>:装配set类型的值,不允许重复

        <map>:装配map类型的值,名称和值可以是任意类型

        <props>:装配properties类型的值,名称和值必须都是String类型

      )

    使用注解的装配

    spring的注解装配

       @Autowired  @Qualifier

    JSR-330(JCP发布的java依赖注入规范  在javax当中)

     @Inject     @Named

    备注

    关于Spring中的<context:annotation-config/>配置

      当我们需要使用BeanPostProcessor时,直接在Spring配置文件中定义这些Bean显得比较笨拙,例如:
      使用@Autowired注解,必须事先在Spring容器中声明AutowiredAnnotationBeanPostProcessor的Bean:

    <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor "/>

      使用 @Required注解,就必须声明RequiredAnnotationBeanPostProcessor的Bean:

    <bean class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor"/>

      类似地,使用@Resource、@PostConstruct、@PreDestroy等注解就必须声明 CommonAnnotationBeanPostProcessor;使用@PersistenceContext注解,就必须声明 PersistenceAnnotationBeanPostProcessor的Bean。


      这样的声明未免太不优雅,而Spring为我们提供了一种极为方便注册这些BeanPostProcessor的方式,即使用<context:annotation- config/>隐式地向 Spring容器注册AutowiredAnnotationBeanPostProcessor、RequiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor以及PersistenceAnnotationBeanPostProcessor这4个BeanPostProcessor。如下:

    <context:annotation-config/> 

      另,在我们使用注解时一般都会配置扫描包路径选项:

    <context:component-scan base-package="pack.pack"/>

      该配置项其实也包含了自动注入上述processor的功能,因此当使用<context:component-scan/>后,即可将<context:annotation-config/>省去。

      我们还可以随意调整扫描行为:使用<context:include-filter>或者使用<context:exclude-filter>

    <context:component-scan base-package="pack.pack">
      <context:include-filter type="assignable"
          expression="pack.pack.abc"/>
    </context:component-scan>

       这里的type就是过滤的策略,type的类型:

        annotation:过滤扫描使用指定注解所标注的那些类,通过expression属性指定要扫描的注解

        assignable:过滤扫描派生与expression属性所指定类型的那些类

        aspectj:过滤扫描与expression属性所指定的AspectJ表达式所匹配的那些类

        custom:使用自定义的org.springframework.core.type.TypeFilter实现类,该类由expression属性指定

        regex:过滤器扫描类的名称与expression属性所指定的正则表达式所匹配的那些类

  • 相关阅读:
    android scroll 中 scroll Bar 修改
    android 在代码中安装apk的方法
    android JSON 的应用
    android 混淆相关 proguard
    listView 相关的优化设置
    android 名称解释
    android Gallery 两侧阴影实现
    Service 详解
    使用alias 简化命令
    android 动画小结
  • 原文地址:https://www.cnblogs.com/gongdi/p/4953016.html
Copyright © 2011-2022 走看看