博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring学习总结2——bean的配置
阅读量:6346 次
发布时间:2019-06-22

本文共 3626 字,大约阅读时间需要 12 分钟。

  hot3.png

直接上配置实例

    
        
小明1
        
小明2
        
小明3
    
    
    
    
        
        
        
    
    
        
         
        
    
【点http协议 referer 】
    
        
abcd        
hello    

 内部bean

    
         
...    

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

    
    

自动装配bean的属性值

101745_MxXB_1470450.png

除了使用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

@Componentpublic 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@Componentpublic @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;      }      // ...    }

转载于:https://my.oschina.net/nyp/blog/380040

你可能感兴趣的文章
memcached的安装与开启脚本
查看>>
Linux与Window字符集~~伤不起的幽灵空白符
查看>>
zabbix 邮件报警 -- sendmail
查看>>
JavaScript异步编程
查看>>
tcpdump用法小记
查看>>
MySQL基础安全注意细节
查看>>
Oracle随机函数—dbms_random
查看>>
pvr 批量转换
查看>>
linux命令basename使用方法
查看>>
windows下开发库路径解决方案
查看>>
linux迁移mysql数据目录
查看>>
脚本源码安装LNMP
查看>>
Percona Server安装
查看>>
函数为左边表达式
查看>>
读书杂谈一
查看>>
winform listbox 元素显示tooltrip
查看>>
cacti安装与配置
查看>>
TF-IDF与余弦相似性的应用(一):自动提取关键词
查看>>
javascript面向对象2
查看>>
限制容器对CPU的使用 - 每天5分钟玩转 Docker 容器技术(28)
查看>>