文档章节

最小化Spring XML配置

龙之天空
 龙之天空
发布于 2015/07/28 13:28
字数 966
阅读 5
收藏 0

@Inject
  和@Autowired一样,@Inject可以用来自动装配属性、方法和构造器;与@Autowired不同的是,@Inject没有required属性。
 因此,@Inject注解所标注的关系必须存在,如果不存在,则会抛出异常。
  @Inject还提供了另一种技巧。与其直接注入一个应用,不如要求@Inject注入一个Provider。Provider接口可以实现Bean应用的
 延迟注入以及Bean的多个实例等功能。
  例如,我们有一个KnifeJuggler类需要注入一个或多个Knife的实例。假设Knife Bean的作用域声明为prototype,下面的
 KnifeJuggler的构造器将获得5个KnifeBean:
  private Set<Knife> knives;
  
  public KnifeJuggler(Provider<Knife> knifeProvider){
   knives = newHashSet<>();
   for(int i = 0;i<5;i++){
    knives.add(knifeProvider.get());
   }
  }
  
  KnifeJuggler将获得一个Provider<Knife>,而不是在构造器中获得以个Knife实例。这个时候,只有provider被注入进去
 在调用provider的get()方法之前,实际的knife对象并没有被注入。在这个示例中,get()方法被调用了5次。因为Knife name的作用域
 为prototype,所以knife的Set集合将被赋予5个不同的Knife对象
 
在注解注入中使用表达式@Value
 @Value直接标注某个属性、方法或者方法参数,并传入一个String类型的表达式来装配属性,
 例如:
  @Value("Eruption")
  private String song;
  
 实际上,装配简单的值并不是@Value所擅长的,不过,借助SpEL表达式,@Value被赋予了魔力。
 例如: 
  @Value("#{sytemProperties.myFavoriteSong}")
  private String song;
  
自动检测Bean:
 1、<contxt:componenet-scan>元素除了完成与<context:annotation-config>一样的工作,还允许Spring自动检测Bean和定义Bean
 这意味着Spring应用中的大多数(或者所有)Bean都能够实现定义和装配.
 
 2、过滤组件扫描
    事实上,可以通过为<context:componenet-scan>配置<context:include-filter>和/或者<context:exclude-filter>
 子元素,我们可以随意调整扫描行为
 
  <context:componenet-scan base-package = "com.springinaction.springidol">
   <context:include-filter type="assignable" expression="com.springinaction.springidol.Instruments"/>
  </context:componenet-scan>
  
  过滤器类型                     描述
  annotation                    过滤器扫描使用指定注解所标注的哪些类,通过expression属性指定要扫描的注解
  assignable                    过滤器扫描派生与expression属性所指定雷丁的那些类
  aspectj                       过滤器扫描与expression属性所指定的AspectJ表达式所匹配的那些类
  custom                        使用自定义的org.springframework.core.type.TypeFilter实现类,该类由expression属性指定
  regex                         过滤器扫描类的名称与expression属性所指定的正则表达式所匹配的那些类
  
  除了使用<context:include-filter>告知<context:componenet-scan>哪些类需要注册为Spring Bean以外,我们还可以使用
 <context:exclude-filter>来告知<context:componenet-scan>哪些类不需要注册为Spring Bean。
     例如,除了自定义的@SkipIt注解的类,其他所有的Instruments实现都需要注册为Spring Bean。
  
  <context:componenet-scan base-package = "com.springinaction.springidol">
   <context:include-filter type="assignable" expression="com.springinaction.springidol.Instruments"/>
   <context:exclude-filter type="annotation" expression="com.springinaction.springidol.SkipIt"/>
  </context:componenet-scan>
  
  
定义个一个配置类
    在基于java的配置里使用@Configuration注解的java类,就等价于xml配置中的<beans>元素元素。
 例如: 
 package com.springinaction.springidol
 import org.springframework.context.annotation.Configuration;
 
 @Configuration
 public class SpringIdoIConfig{
 
  //Bean declaration methods go here
 }
 
  @Configuration注解会作为一个标识告诉Spring:这个类将包含一个或多个Spring Bean的定义。这些Bean的定义是使用
 @Bean注解所标注的方法。让我们看一下如何使用@Bean来装配使用spring基于java的配置所声明的Bean。
 
  @Bean
  public Performer duke(){
   return new Juggler();
  }
  
  这个简单方法就是java配置,他等价于我们之前使用xml所配置的<bean>元素。@Bean告知Spring这个方法将返回一个对象,
 这个对象应该被注册为Spring应用上下文中的一个Bean。方法名将作为该Bean的Id。在该方法中所实现的所有逻辑本质上都是为了创建Bean

© 著作权归作者所有

共有 人打赏支持
上一篇: aop
下一篇: bean的生命周期
龙之天空
粉丝 7
博文 79
码字总数 18140
作品 0
宁波
私信 提问
手把手教你搭建SpringMVC——最小化配置

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

青夜之衫
2017/12/05
0
0
spring 4 升级踩雷指南

前言 最近,一直在为公司老项目做核心库升级工作。本来只是想升级一下 JDK8 ,却因为兼容性问题而不得不升级一些其他的库,而其他库本身依赖的一些库可能也要同步升级。这是一系列连锁问题,...

静默虚空
2017/12/15
0
0
web.xml中classpath:和classpath*:

web.xml中classpath:和classpath*: 有什么区别? classpath:只会到你的class路径中查找找文件; classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找. 存放位置: 1:src下面...

leesama
2014/02/11
0
0
spring boot框架学习4-spring boot核心(3)

本节主要: 1:spring boot 为我们提供的 starter pom 都有哪些 2:怎么添加xml配置文件 3:日志相关 本文是《凯哥陪你学系列-框架学习之spring boot框架学习》中第四篇 spring boot框架学习...

凯哥java
2017/10/31
0
0
《Spring Security3》第二章第二部分翻译

三步之内使我们的应用变得安全 尽管Spring Security的配置可能会很难,但是它的作者是相当为我们着想的,因为他们为我们提供了一种简单的机制来使用它很多的功能并可以此作为起点。以这个为起...

小样
2012/03/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

day11

architect刘源源
今天
7
0
论学好Linux系统的超级重要性

不知道各位在日常的工作生活中有没有接触过“rm -rf /*”这个命令,因为这个命令搞出来的事情可还不少呢!前段时间就在一个群里看到了有个小伙子,老板让他去维护一下服务器,这小伙也不太懂...

Linux就该这么学
昨天
6
0
git 使用

1,首先在github配置好信息和仓库,然后在本地进行操作 git init git config user.name 'zhangwuer' git config user.email '56789053@qq.com' 2,与远程分支建立连接 git checkout -b test......

天王盖地虎626
昨天
3
0
git checkout 命令详解

在日常的git操作中,git checkout——检出,是我们的常用命令。最为常用的两种情形是创建分支和切换分支。 在下面的命令中,使用了一些简写,在这里说明一下: git st # git statusgit ci ...

shzwork
昨天
11
0
【Nginx】Nginx多级代理,获取客户端真实请求IP以及每级代理IP

Nginx多级代理,获取客户端真实请求IP以及每级代理IP 如图所示,每一级nginx里的location配置里需要加上对应的配置,最后一级nginx是直接到应用,测试时为了方便,直接用echo模块去测试,打印...

薛定谔的旺
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部