首页 > 编程语言 > 详细

spring bean 配置

时间:2015-11-10 15:46:45      阅读:357      评论:0      收藏:0      [点我收藏+]

这篇文章类似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属性所指定的正则表达式所匹配的那些类

spring bean 配置

原文:http://www.cnblogs.com/gongdi/p/4953016.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!