spring配置方式有xml配置和注解配置和基于java的配置方式,配置Bean是spring应用的重要一环,依赖注入也是spring实现ioc的核心。

xml配置方式

常见的几种注入方式
1.setter方法注入
2.构造器方法注入
3.p命名空间注入

setter方法注入
在spring中一般使用元素来调用属性的setter方法注入

<bean id="tom" class="test.worker"><property name="hobby" value="sing"/>   //将sing注入hobby属性通过set方法
</bean>

构造器方法注入

<bean id="jerry" class="test.worker"><constructor-arg name="hobby" value="run"/>  //将run注入hobby属性通过构造方法
</bean>

p命令空间注入
p命令空间其实相对前面两种一种更简写的注入方法

<bean id="tom" class="test.worker"p:hobby="sing"/>
<bean id="jerry" class="test.worker"p:hobby="run"/>

这些都是比较基础的类型装配,在java中有很多集合类,spring同样提供了它们的装配方式
装配List

<bean id="tom" class="test.worker"><property name="hobby"><list><value>sing</value><value>run</value><value>basketball</value><ref  bean="xxx"/>     //引用装配方式</list></property>
</bean>

装配Set

<bean id="jerrry" class="test.worker"><property name="hobby"><set><value>sing</value><value>run</value><value>basketball</value><ref  bean="xxx"/>     //引用装配方式</set></property>
</bean>

装配Map

<bean id="tom" class="test.worker"><property name="hobby"><map><entry key="hobby1" value="sing"/><entry key="hobby2" value="run"/><entry key="hobby3" value="basketball"/></map></property>
</bean>

tip:元素由一个键和一个值组成他们都可以为值或者引用
key:指定键为string
key-ref:指定键为引用
value:指定值为string
value-ref:指定值为引用

另外spring可以装配空值使用<null/>元素

自动装配和自动检测

上面的xml配置虽然能完成Bean装配,但是当Bean元素的数量不断增多时,xml文件必然变得复杂,所有spring提供了几种减少xml配置的方法

spring提供了五种类型的自动装配
1.byName:把与Bean属性具有相同名字或者id的Bean注入到Bean属性中去。

<bean id="hobby" class="test.hobbies"/><bean id="tom" class="test.worker"  autowire="byName"><property  id="age",value="22"/>//因为tom的hobby属性和Bean的id一样,所以会将Bean直接注入这个属性
</bean>

2 byType:把与Bean的属性具有相同类型的自动装配到Bean的属性中
使用方式和上面一样,不过byType自动装配有一个局限,当多个Bean的类型与要装配的类型一样时,spring不会选择最优Bean,而是抛出异常

我们有两种方法可以解决这个问题,一,我们可以自己标记出首选Bean,使用Bean元素的primary属性设置为true即可,但是默认所有的Bean这个属性都是true,所以我们需要将其他Bean都设置为false才能达到效果。二,我们可以排除一些Bean,设置autowire-candidate属性为false即可。

3.constructor:把与Bean的构造器入参具有相同类型的其他Bean自动装配到Bean构造器对应的入参中
constructor和byTpye具有一样的局限性,多个Bean匹配入参或者一个类的多个构造器都满足匹配条件,spring不会做出最优解,而是抛出异常

4 autodetect 它是首先尝试constructor进行自动装配,失败再尝试byTpye的一种方法。

5.no:默认的方式是不进行自动装配的,通过手工设置ref属性来进行装配bean

注解配置方式

注解配置方式和在xml文件中使用自动装配效果上是一样的,但是它省去了繁琐的xml文件,允许我们在java类上直接进行配置注入

首先需要声明我们使用了注解配置方法
在xml文件中加入context:component-scan 元素

<context:component-scan base-package="test" />//告诉spring我们启用注解配置,并在base-package中的包下进行自动扫描

@Component:用来标识bean和xml中的作用一样,相当于定义bean,它没有显示的id,默认在spring中的id是类名首字母小写
@controller 控制器(注入服务)用于标注控制层,相当于struts中的action层
@service 服务(注入dao)用于标注服务层,主要用来进行业务的逻辑处理
@repository(实现dao访问)用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件
这四个注解用法是一样的,只是这样标注更容易区分它们分别作用在哪个层

表明依赖关系的注解
@Autowired(Spring提供的)//相当于xml文件提到的自动检测注入,但是前面有四种自动注入方式,这里默认采用byType的方式注入,如果type相当则byName
@Qualifier:这里面可以给定一个名字,当byName的时候用来选择注入
它有一个属性required,表示当前bean是否必须被注入

@Resource:和@Autowired几乎一样,但不能配合@Qualifier,因为它本身就可以指定beanName。但没有required属性

基于java的配置方式

注解开发虽然省去了复杂冗余的bean等等,但是我们还是要使用xml文件开启注解才行,也就是xml文件并不能完全被取代。

所以另一种方式可以进行改进比如开启注解的context:component-scan元素可以被@ComponentScan替代,这样xml就完全省去了,但是这其中还有个问题,就是ClassPathXmlApplicationContext这个类要求我们必须传一个XML,这时@Configuration就起到作用了,被它修饰的java类等同于xml文件,习惯称为配置类。在使用配置类以后,我们使用AnnotationConfigApplicationContext容器与之对应,这个容器就是针对注解开发的。

public class Test {public static void main(String[] args) {ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);//传入类的.class文件Worker worker = (Worker) applicationContext.getBean("worker ");System.out.println(worker);}
}

@Bean 在这种配置方式中起到定义和注入Bean的作用

最后这三种方式互不影响,可以同时使用,但一般不这样做,只是两两混合用

spring实战学习(三)配置方式相关推荐

  1. Spring 学习之 二----Spring创建对象的三种方式

    最近在系统的学习Spring,现在就Spring的一些知识进行总结. 我们知道Spring是一个开放源代码的设计层面的框架,他主要解决的是业务逻辑层与其他各层之间松耦合的问题. Spring 有三个核 ...

  2. spring security 学习三-rememberMe

    spring security 学习三-rememberMe 功能:登录时的"记住我"功能 原理: rememberMeAuthenticationFilter在security过 ...

  3. Spring集成Memcached三种方式(一)

    Spring集成Memcached三种方式(一) 转载:http://blog.csdn.net/u013725455/article/details/52102170 Memcached Clien ...

  4. Java框架篇---spring aop两种配置方式

    Java框架篇---spring aop两种配置方式 第一种:注解配置AOP 注解配置AOP(使用 AspectJ 类库实现的),大致分为三步:  1. 使用注解@Aspect来定义一个切面,在切面中 ...

  5. IoC、Spring 环境搭建、Spring 创建对象的三种方式、DI

    二.IoC 中文名称:控制反转 英文名称:(Inversion of Control) 3.I oC 是什么? 3.1 IoC 完成的事情原先由程序员主动通过 new 实例化对象事情,转交给 Spri ...

  6. Spring MVC 实战:三种方式获取登录用户信息

    前言 Web 项目中,维持用户登录状态的常用方式有三种,分别是 Cookie.Session.Token,不管哪种方案,都需要获取到用户信息供业务层使用. 由于获取用户信息与具体业务无关,因此在普通的 ...

  7. Spring实战(三)Spring中装配Bean的三种方式---XML、JavaConfig、AutoWire

    创建应用对象之间协作关系的行为称为装配(wiring),这也是依赖注入的本质. Spring容器负责创建应用程序中的bean并通过DI来协调这些对象之间的关系,而开发者需要告诉Spring需要创建哪些 ...

  8. Spring boot Mybatis-Plus数据库单测实战(三种方式)

      单元测试长久以来是热门话题,本文不会讨论需不需要写单测,可以看看参考资料1,我个人认为写好单测应该是每个优秀开发者必备的技能,关于写单测的好处在这里我就不展开讨论了,快速进入本文着重讨论的话题,如 ...

  9. Spring 依赖注入三种方式的实现,及循环依赖问题的解决(源码+XML配置)

    搬砖啦,搬砖啦,这几天在看Spring相关的书,下面给大家分享一下这几天的心得与收获,Go Go Go! Spring支持两种依赖注入方式,分别是属性注入,构造函数注入.除此之外,Spring还支持工 ...

最新文章

  1. Mysql数据库常用操作整理
  2. 十二年 10 次 IT 大考 猪八戒网的系统架构和开发流程经历了什么?
  3. 用dwz+springmvc出现这个问题Http status: 200 OK ajaxOptions: parsererror thrownError
  4. 关于mysql触发器和存储过程的理解
  5. css背景图片、圆角、盒子阴影、浮动
  6. scrapy —— ImagePipeline
  7. Oracle中rownum用法总结
  8. UIWebView背景透明的方法
  9. linux中安装yum简单方法
  10. DA14580与ADXL362应用
  11. 新浪tcn短网址短链接在线生成器推荐
  12. oracle12162错误,ORA-12162: TNS:net service name is incorrectly specified报错问题如何解决?...
  13. julia集 matlab代码,Mandelbrot集和Julia集的分形图之matlab实现.docx
  14. movsw 汇编_【汇编】 常用代码段 rep movsw/rep movsw
  15. 关于进程wuauclt.exe
  16. 2019-9-25-如何让-USB-设备不显示安全删除硬件弹出选项
  17. PDF文件如何在线翻译成中文
  18. 华为鸿蒙os下载安装,华为鸿蒙系统安装包
  19. 对于有关串口通信的clk的解释
  20. Linux离线安装Maven

热门文章

  1. [转] “嫁给我是你一生的赌注,我怎么舍得让你输”
  2. 操盘手到底是个什么职业?
  3. 美团拼多多挑起社区团购新战事,谁能“见血封喉”?
  4. 【XAI】Nettack IG-JSMA
  5. 5 个好用的开发者 Vim 插件
  6. 三个堪称神器,却很少人使用的手机软件
  7. 北大双杰——孔庆东和余杰
  8. AI开源的硬核战场:领军者百度如何亮剑?
  9. idea project structure下modules的Language Level总是自动变到5
  10. 微信小程序api.weixin.qq.com不能设置到白名单导致openid获取不到的解决方法