文档章节

Spring学习总结2——bean的配置

yope
 yope
发布于 2015/02/26 10:23
字数 1488
阅读 49
收藏 0
点赞 0
评论 0

直接上配置实例

<!-- 给数组注入值 -->
<property name="empName">
    <list>
        <value>小明1</value>
        <value>小明2</value>
        <value>小明3</value>
    </list>
</property>
<!-- 给list注入值 list 中可以有相当的对象 -->
<property name="empList">
<list>
    <ref bean="emp2" />
    <ref bean="emp1"/>
</list>
</property>
<!-- 给set注入值 set不能有相同的对象 -->
<property name="empsets">
    <set>
        <ref bean="emp1" />
        <ref bean="emp2"/>
        <ref bean="emp2"/>
    </set>
</property>
<!-- 给map注入值 map只有key不一样,就可以装配value -->
<property name="empMaps">
    <map>
        <entry key="11" value-ref="emp1" /> 
        <entry key="22" value-ref="emp2"/>
        <entry key="33" value-ref="emp1"/>
    </map>
</property>
<!-- 给属性集合配置 -->【点http协议 referer 】
<property name="pp">
    <props>
        <prop key="pp1">abcd</prop>
        <prop key="pp2">hello</prop>
    </props>
</property>

 内部bean

<bean id=”foo” class=”....Foo”>
<property name=”属性”>
<!—第一方法引用-->
<ref bean=’bean对象名’/>
<!—内部bean-->
    <bean> 
        <properyt>...</property>
    </bean>
</property>
</bean>

通过构造函数注入值,下面给出beans.xml的关键代码

<!-- 配置一个雇员对象 -->
<bean id="employee" class="com.nyp.constructor.Employee">
    <!-- 通过构造函数来注入属性值 -->
    <constructor-arg index="0" type="java.lang.String" value="大朋" />
</bean>

自动装配bean的属性值


除了使用XML配置文件配置Bean和依赖元数据外,spring 3 还支持使用注解来配置相关的元数据。

Spring Framework 3 除了自己提供的注解如@Component,@Autowired之外,

还支持JSR 250提供的@Resource等注解,JSR 330提供的@Inject等注解。

使用注解定义配置Bean

1、spring提供的注解@Component,@Repository,@Service,@Controller

@Component等注解基本使用

@Component是个一般性的注解,使用此注解修饰的POJO类,即成为spring容器管理的组件。而@Repository,@Service,@Controller这三个则是更语义化的注解,分别指名修饰的相应类为持久层,服务层和展示层组件。这四个注解本质上是一样的,但后三个未来可能会增加更多语义。

可以这样使用@Component

@Component
public class MyComponent () {…}
@Component(value=”aComponent”)
public class MyComponent () {…}
@Component(“aComponent”)
public class MyComponent () {…}

@Component有一个value属性,可以用来指定bean的名字,与xml文件中元素中的id含义相同,也可以省略掉value,直接写组件的名字,就像最后一个示例一样。如果不指定bean的名字,则spring会使用默认的BeanNameGenerator策略类来生成bean的名字,为小写开头的非限定类名,比如第一个示例的bean名字为myComponent。

@Component注解还可以与注解@Qualifier,@Scope,@Lazy,@Primary,@DependsOn合作进行更细粒度的bean配置。

            @Qualifier 指定限定描述符,对应于基于XML配置中的<qualifier>标签,虽然@Qualifier向后兼容可以与bean id匹配,但@Qualifier指定的不是bean id,最好不要依赖于这一隐式的规则。bean id在整个容器内是独一无二的,但@Qualifier限定符却可以重复,特别是用于集合类时十分方便。

            也可以扩展@Qualifier注解,提供更细致的限定匹配策略,而且更加语义化。比如:

            @Target({ElementType.FIELD, ElementType.PARAMETER})
            @Retention(RetentionPolicy.RUNTIME)
            @Qualifier
            public @interface Offline {
            }

            @Scope 用于指定bean 作用域,默认为singleton

            @Lazy 指名bean延迟初始化,等需要时再初始化而不是容器初始化时就初始化bean。

            @Primary 自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者。

            @DependsOn:定义Bean初始化及销毁时的顺序。


扩展@Component

可以通过自定义注解扩展@Component,定制更语义化的组件注解,只要在扩展的注解上注解@Component即可.其实@Repository、@Service、@Controller也是通过该方式实现的。

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface business{
String value() default “”;
}


2、JSR 330的@Named注解

Java标准中与@Component等价的注解是JSR 330提供的@Named注解,其用法与@Component相同,也有一个value属性可以指定bean id。


使用注解注入依赖的bean

    1、spring的@Autowired注解

    spring提供了@Autowired来自动注入依赖装配beans。@Autowired默认按类型(byType)来装配beans,可以与注解@Qualifier,@Required配合进行细类度的装配配置。

    默认情况下,如果存在多个匹配的beans或者不存在匹配的bean,容器会抛出BeanCreationException异常。

    @Required 指示必须存在匹配的依赖组件,否则会抛出异常。

    @Qualifier 指定限定描述符,容器会匹配与限定描述符相一致的组件,即与组件的限定描述符一致的进行匹配。

    @Autowired自身也有一个required属性,可以设定的值为true或false。推荐优先使用这个属性而不是注解@Required。

    2、JSR 250的@Resource注解

    @Resource注解默认按名称(byName)自动注入。@Resource有两个属性name和type,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,则使用byName自动注入策略。

    @Resource装配顺序

      1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常

      2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常

      3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常

      4. 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;

    3、JSR 330的@Inject注解

    @Inject可以注入依赖的bean,如果需要一个限定名字的依赖bean,可以与@Named配合使用,如

    import javax.inject.Inject;
    import javax.inject.Named;
     
    public class SimpleMovieLister {
     
      private MovieFinder movieFinder;
     
      @Inject
      public void setMovieFinder(@Named("main") MovieFinder movieFinder) {
          this.movieFinder = movieFinder;
      }
      // ...
    }


© 著作权归作者所有

共有 人打赏支持
yope
粉丝 15
博文 38
码字总数 33640
作品 0
厦门
程序员
手把手教你搭建SpringMVC——最小化配置

为什么需要Spring MVC 最开始接触网页的时候,是纯的html/css页面,那个时候还是用Dreamweaver来绘制页面。 随着网站开发的深入,开始学习servlet开发,记得最痛苦的就是servlet返回网页的内...

青夜之衫 ⋅ 2017/12/05 ⋅ 0

Spring系列之Spring常用注解总结

传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop、事物,这么做有两个缺点: 1、如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大;如果按需求分开.xml文件,那么...

HJCui ⋅ 05/29 ⋅ 0

Spring基础篇——Spring容器和应用上下文理解

上文说到,有了Spring之后,通过依赖注入的方式,我们的业务代码不用自己管理关联对象的生命周期。业务代码只需要按照业务本身的流程,走啊走啊,走到哪里,需要另外的对象来协助了,就给Spr...

圆梦巨人 ⋅ 05/03 ⋅ 0

网关 Spring-Cloud-Gateway 源码解析 —— 网关初始化

网关 Spring-Cloud-Gateway 源码解析 —— 网关初始化 Harries Blog™2017-12-135 阅读 SpringAppclasspathcatbeanAPIbuildbug 本文主要基于 Spring-Cloud-Gateway 2.0.X M4 摘要: 原创出处 ......

Harries Blog™ ⋅ 2017/12/13 ⋅ 0

Spring中的默认beanName

在Spring中每一个注册到容器中的Bean都有自己的名字(至少一个),可能不止一个(别名)。对于未明确指定name的Bean,Spring会自动为其生成一个名字。而对于在xml中配置的Bean和使用诸如Ser...

禾禾元元 ⋅ 06/07 ⋅ 0

Aspectj与Spring AOP比较

1、简介 今天有多个可用的 AOP 库, 它们需要能够回答许多问题: 是否与用户现有的或新的应用程序兼容? 在哪里可以实现 AOP? 与自己的应用程序集成多快? 性能开销是多少? 在本文中, 我们将...

沈渊 ⋅ 04/18 ⋅ 0

说说在 Spring 中如何基于 Java 类进行配置

JavaConfig 原来是 Spring 的一个子项目,它通过 Java 类的方式提供 Bean 的定义信息,在 Spring4 的版本, JavaConfig 已正式成为 Spring4 的核心功能 。 1 定义 Bean 普通的 POJO 只要标注...

deniro ⋅ 05/11 ⋅ 0

加速Java应用开发速度1——加速spring/hibernate应用调试时启动速度

《加速Java应用开发速度》系列目录: 加速Java应用开发速度1——加速spring/hibernate应用调试时启动速度 加速Java应用开发速度2——加速项目调试启动速度 加速Java应用开发速度3——单元/集...

咖啡杯 ⋅ 2014/02/18 ⋅ 0

详解Java的Spring框架中的注解的用法

使用Spring注解来注入属性 1.1. 使用注解以前我们是怎样注入属性的 类的实现: 配置文件: 1.2. 引入@Autowired注解(不推荐使用,建议使用@Resource) 类的实现(对成员变量进行标注) 或者...

Airship ⋅ 04/22 ⋅ 0

spring mvc 统一异常处理

1、定义一个统一异常处理类 @ControllerAdvice,是spring3.2提供的新注解, 一般扫描context:component-scan扫描时也能扫描到,不需要在配置文件配置 但如果你的spring-mvc配置文件使用如下方...

qiun ⋅ 2016/06/24 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring JavaConfig 注解

JavaConfig注解允许开发者将Bean的定义和配置放在Java类中。它是除使用XML文件定义和配置Bean外的另一种方案。 配置: 如一个Bean如果在XML文件可以这样配置: <bean id="helloBean" class="...

霍淇滨 ⋅ 22分钟前 ⋅ 0

Spring clound 组件

Spring Cloud技术应用从场景上可以分为两大类:润物无声类和独挑大梁类。 润物无声,融合在每个微服务中、依赖其它组件并为其提供服务。 Ribbon,客户端负载均衡,特性有区域亲和、重试机制。...

英雄有梦没死就别停 ⋅ 23分钟前 ⋅ 0

Confluence 6 重新获得站点备份文件

Confluence 将会创建备份,同时压缩 XML 文件后存储熬你的 <home-directory>/backups> 目录中。你需要自己访问你安装的 Confluence 服务器,并且从服务器上获得这个文件。 运行从 Confluence...

honeymose ⋅ 28分钟前 ⋅ 0

informix的常用SQL语句

1、创建数据库 eg1. 创建不记录日志的库testdb,参考语句如下: CREATE DATABASE testdb; eg2. 创建带缓冲式的记录日志的数据库testdb(SQL语句不一定在事务之中,拥有者名字不被用于对象的解...

wangxuwei ⋅ 43分钟前 ⋅ 0

matplotlib画图

最简单的入门是从类 MATLAB API 开始,它被设计成兼容 MATLAB 绘图函数。 from pylab import *from numpy import *x = linspace(0, 5, 10)y = x ** 2figure()plot(x, y, 'r')...

Dr_hu ⋅ 今天 ⋅ 0

RabbitMQ学习以及与Spring的集成(三)

本文介绍RabbitMQ与Spring的简单集成以及消息的发送和接收。 在RabbitMQ的Spring配置文件中,首先需要增加命名空间。 xmlns:rabbit="http://www.springframework.org/schema/rabbit" 其次是模...

onedotdot ⋅ 今天 ⋅ 0

JAVA实现仿微信红包分配规则

最近过年发红包拜年成为一种新的潮流,作为程序猿对算法的好奇远远要大于对红包的好奇,这里介绍一种自己想到的一种随机红包分配策略,还请大家多多指教。 算法介绍 一、红包金额限制 对于微...

小致dad ⋅ 今天 ⋅ 0

Python 数电表格格式化 xlutils xlwt xlrd的使用

需要安装 xlutils xlwt xlrd 格式化前 格式化后 代码 先copy读取的表格,然后按照一定的规则修改,将昵称中的学号提取出来替换昵称即可 from xlrd import open_workbookfrom xlutils.copy ...

阿豪boy ⋅ 今天 ⋅ 0

面试题:使用rand5()生成rand7()

前言 读研究生这3 年,思维与本科相比变化挺大的,这几年除了看论文、设计方案,更重要的是学会注重先思考、再实现,感觉更加成熟吧,不再像个小P孩,人年轻时总会心高气傲。有1 道面试题:给...

初雪之音 ⋅ 今天 ⋅ 0

Docker Toolbox Looks like something went wrong

Docker Toolbox 重新安装后提示错误:Looks like something went wrong in step ´Checking if machine default exists´ 控制面板-->程序与应用-->启用或关闭windows功能:找到Hyper-V,如果处......

随你疯 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部