Spring自动装配之不能偷懒

开发 后端
Spring之自动装配,所谓自动装配,从字面解读,我想应该不难理解吧。那究竟spring 自动装配有几种装配类型。那下面我们就介绍spring自动装配之不能偷懒——autowire="no",在接受之前我们先介绍自动装配总共包括几种装配方式。

Spring之自动装配,所谓自动装配,从字面解读,我想应该不难理解吧(当然不是诱导读者去咬文嚼字)。那究竟spring 自动装配有几种装配类型(我想大家最关注的应该是我们什么时候可以“偷懒”反之什么时候又不能,我想开发者目的应该也是为了简化程序员的工作)。那下面我们就介绍spring自动装配之不能偷懒——autowire="no",在接受之前我们先介绍自动装配总共包括几种装配方式(在其他装配方式中就不在介绍了)。

在介绍之前,先简单的提一个问题(自动装配总共有几种呢),答案(六种)也许与大家想的有点背离,但是我个人认为并不是不无道理的。

1. default-autowire="那五种形式": 这种是在全局(即在跟标签里)定义的,如果局部定义了autowire 可想而知,当然是按照局部的去进行自动装配了,如果没有定义就是按照跟标签的默认定义去进行装配,所以在这里把它单独拿出来作为一种

2. No:通过ref元素指定依赖

3. byName:在容器中寻找和需要自动装配的属性名相同的Bean(或ID),如果没有找到相符的Bean,该属性就没有被装配上。

4. byType:在容器中寻找一个与需要自动装配的属性类型相同的Bean;如果没有找到相符的Bean,该属性就没有被装配上,如果找到超过一个相符的Bean抛出异常org.springframework.beans.factory.UnsatisfiedDependencyException(特此声明测试针对spring2.5.6,在spring3.0中检查到多个Bean貌似没有异常并且在3.0中没有依赖检查这个属性)

5. Constructor:在容器中查找与需要自动装配的Bean的构造方法参数一致的一个或者过个Bean,如果从在不确定的Bean或构造方法,容器会抛出异常org.springframework.beans.factory.UnsatisfiedDependencyException.

6. Autodetect:首先我们尝试使用constructor来自动装配,然后使用byType方式。不确定行的处理与constuctor和byType方式一样

既然我们的题目叫不能偷懒,那当然我们就要介绍no了

Java代码

 

  1. //Longmanfei.xml  
  2.  
  3.  
  4.  
  5. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  6.  
  7. xsi:schemaLocation="http://www.springframework.org/schema/beans  
  8.  
  9. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16. class="cn.csdn.service.GreetingServiceImpl" autowire="no">  
  17.  
  18.  
  19.  
  20.  
  21. //GreetingDaoImpl  
  22.  
  23. public class GreetingDaoImpl implements GreetingDao {  
  24.  
  25. private String say;  
  26.  
  27. public void say() {  
  28.  
  29. System.out.println("我打了这个招呼"+say);  
  30.  
  31. }  
  32.  
  33. public void setSay(String say) {  
  34.  
  35. this.say = say;  
  36.  
  37. }  
  38.  
  39. }  
  40.  
  41. //GreetingServiceImpl  
  42.  
  43. public class GreetingServiceImpl implements GreetingService{  
  44.  
  45. private GreetingDaoImpl greetingDaoImpl;  
  46.  
  47. public void say() {  
  48.  
  49. greetingDaoImpl.say();  
  50.  
  51. }  
  52.  
  53. public void setGreetingDaoImpl(GreetingDaoImpl gdi) {  
  54.  
  55. System.out.println("我调用了set方法");  
  56.  
  57. this.greetingDaoImpl = gdi;  
  58.  
  59. }  
  60.  
  61. public GreetingServiceImpl() {  
  62.  
  63. super();  
  64.  
  65. System.out.println("我调用了空的构造器");  
  66.  
  67. }  
  68.  
  69. public GreetingServiceImpl(GreetingDaoImpl greetingDaoImpl) {  
  70.  
  71. super();  
  72.  
  73. System.out.println("我调用了有参的构造器");  
  74.  
  75. this.greetingDaoImpl = greetingDaoImpl;  
  76.  
  77. }  
  78.  
  79. }  
  80.  
  81. //junit测试  
  82.  
  83. @Test 
  84.  
  85. public void test1(){  
  86.  
  87. /*加载spring容器可以解析多个配置文件采用数组方式传递*/ 
  88.  
  89. ApplicationContext  
  90.  
  91. ac=new ClassPathXmlApplicationContext("classpath:Longmanfei.xml");  
  92.  
  93. //直接转换成接口便于日后修改数据/*Ioc控制反转体现*/  
  94.  
  95. GreetingService  
  96.  
  97. gs=(GreetingService) ac.getBean("greetingServiceImpl");  
  98.  
  99. gs.say();  
  100.  
  101. }  

【编辑推荐】

  1. Java EE进阶之Spring事务深入浅出
  2. Spring事务管理高级应用难点剖析
  3. Spring的Hibernate事务管理机制
  4. 简单介绍Spring事务管理
责任编辑:金贺 来源: ITEYE博客
相关推荐

2009-11-24 09:01:21

Windows 7自动播放

2015-03-18 10:16:57

程序员程序员如何偷懒

2022-08-08 07:33:11

自动装配Java容器

2024-04-26 08:46:42

Spring自动装配核心内容

2023-11-01 09:07:01

Spring装配源码

2024-10-10 12:12:45

SpringAI版本

2012-02-17 10:50:10

Java

2024-05-29 07:47:30

SpringJava@Resource

2009-06-18 11:15:53

装配beanxml配置Spring

2022-06-07 07:58:45

SpringSpring AOP

2023-09-28 09:17:18

SpringBootBean

2022-09-16 09:13:27

代码偷懒方法

2019-12-11 15:21:12

PythonExcel浏览器

2022-05-30 09:32:07

Spring容器

2011-12-30 10:33:36

2009-07-16 09:12:16

程序员偷懒技巧

2012-03-18 22:09:40

rhelkvm

2017-09-11 09:44:24

机器学习自动化AML

2022-06-08 08:04:28

Springservicerepository

2009-07-06 18:43:13

VB指针
点赞
收藏

51CTO技术栈公众号