`

Spring 入门 DI依赖注入(2)

 
阅读更多
(1)Spring中依赖注入如何理解?
所谓依赖注入简单来说就是给对象赋值,只不过这个过程是交给Spring容器来完成。
Spring容器就好比一个超级智能电饭锅,就像我们用这个智能电饭锅做菜,只要告诉电饭锅今晚这个饭需要什么配料,智能电饭锅就会自动帮我们添加配料,我们只需要启动电饭锅即可。

(2)依赖(Dependency injection)注入的好处?
可以解耦,完全面向接口编程,由Spring容器来注入实现类实例,不需要在代码中出现实现类的组件。

(3)常用注解简单介绍
注解:
   *  用来标识的
   *  注解是用来标注类里的东西
   *  注解不能单独存在,只能依附于类中的结构

   *  jdk中经常用的几种注解:
       @Target
          ElementType
              TYPE  类和接口
              FIELD
              METHOD
              …
          用于说明这个注解所标注的注解用在哪些地方
       @Documented
             是否出现在帮助文档
       @Retention  作用范围
            SOURCE  源代码
            CLASS   源代码和class文件
            RUNTIME  源代码、class文件、运行时
   *  自定义注解
       *   一个自定义注解必须有
            @Target  说明这个注解标注在哪个部位
            @Retention  说明注解的作用范围
       *  @interface 说明是一个注解类
       *  注解类中可以有属性
             String value();
   *  注解解析器
       用来解析标注在类上的注解


(4)Spring依赖注入方式?
1.xml 配置 2.通过注解

(5)依赖注入注解解析器
工作原理:
   		   当spring容器启动的时候,
   		    ApplicationContext context = new 
   		         ClassPathXmlApplicationContext("cn/itcast/spring0401/di/
   		                 annotation/applicationContext.xml");
   		  spring容器会创建纳入spring容器管理的bean.分别为person和student; 
   		  spring容器会解析配置文件,会解析到<context:annotation-config>
   		     </context:annotation-config>,会在纳入spring的bean范围内查找属性上是否存在
   		   @Resource(name="student")
   		       * 如果存在:
   		           * 继续解析@Resource有没有name属性
   		               * 如果没有name属性
   		                         就会在所属的属性上,把属性的名称解析出来。会让属性的名称和spring中的bean中的id
   		                         进行匹配,如果匹配成功,则把spring容器中相应的对象赋值给该属性
   		                                   如果匹配不成功,则按照类型进行匹配
   		           *  @Resource有name属性
   		                就会解析name属性的值,把这个值和spring容器中的bean的id进行匹配
   		                   * 如果匹配成功,则把spring容器中的相应的对象赋值给该属性
   		                   * 如果匹配不成功,则直接报错
   		         
   		       * 如果不存在:
   		              不做任何事情
   		              
   		xml和注解的写法:
   		    xml:书写比较麻烦,但是效率比较高
   		    注解:书写比较简单,但是效率比较低
   		注解的写法只适合引用


   <context:annotation-config></context:annotation-config>
   <bean id="person" class="cn.itcast.spring0401.di.annotation.Person"></bean>
   <bean id="s" class="cn.itcast.spring0401.di.annotation.Student"></bean>


(6).类扫描的注解解析器
   		原理:
   		   *  类扫描的注解解析器包含了依赖注入的注解解析器
   		   *  原理:
   		       当启动spring容器的时候,
   		          ApplicationContext context = new 
   		                  ClassPathXmlApplicationContext("cn/itcast/spring0401/
   		                  scan/applicationContext.xml");
   		      spring容器会加载配置文件,并且解析配置文件,就会解析到
   		          *    类扫描的注解解析器,会在base-package包及子包中扫描所有的类
		   		      *  检查类上是否有@Compontent注解
		   		         *  如果有
		   		             *  @Compontent是否有value属性
		   		                 *  没有value属性
		   		                          则会把这个注解所在的类的类名的第一个字母变成小写,其余的不变当做bean的id
		   		                 *  如果有value属性
		   		                          则value属性的值就是bean的id
		   		          *  如果没有
   		          *   类扫描注解解析完以后,所有的在base-package包及子包下的带有@Compontent注解的类就被纳入spring管理了
   		          *   在纳入spring管理的类中扫描各个属性,看属性是否有@Resource,再根据这个注解的规则进行操作。
                  *   扫描的次数:
                         *  根据base-package包及子包进行扫描
                         *  扫描纳入spring管理的所有的bean的属性
                         *  属性的name的值和bean中的id进行匹配


<context:component-scan base-package="cn.itcast.spring0401.scan"></context:component-scan>

(5)spring 继承关系
问题:在spring中,如果对一个类的父类注入了初始值,其子类能否直接继承这个值呢?
Spring默认其子类不能继承父类的注入值,需要加入parent属性,明确类之间的继承关系
Person类:
public class Person {
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public void say() {
		System.out.println(this.name);
	}

}


Student类:
public class Student extends Person {
	
	

}


未在子类加入parent明确继承关系前,xml配置:
 <bean id="person" class="cn.com.hsbc.domin.Person">
 <property name="name">
 <value>aaa</value>
 </property>
 </bean>
 <bean id="student" class="cn.com.hsbc.domin.Student" ></bean>

测试类:
public class ExtendsTest {
	@Test
	public void tsetExtends() {
		ApplicationContext ac = new ClassPathXmlApplicationContext(
				"classpath:spring/application-config.xml");
		Student stu = (Student) ac.getBean("student");
		System.out.println(stu);
		stu.say();

	}

}

测试结果:
此时name输出null,说明student并没有用到父类注入的值


加入parent属性,明确继承关系后,XML配置如下:
 <bean id="person" class="cn.com.hsbc.domin.Person">
 <property name="name">
 <value>aaa</value>
 </property>
 </bean>
 <bean id="student" class="cn.com.hsbc.domin.Student" parent="person"></bean>

输出结果:


  • 大小: 13.9 KB
  • 大小: 32.7 KB
分享到:
评论

相关推荐

    JavaEE技术-试验九.zip_Spring入门_依赖注入

    JavaEE技术实验九的核心主题是Spring框架的入门与依赖注入,以及结合Hibernate框架进行数据库操作。这个实验旨在帮助开发者理解如何在MyEclipse环境中利用Spring框架来实现服务层(Service Layer)和数据访问对象层...

    Spring Ioc(依赖注入)入门例子--属性注入

    在本例“Spring Ioc(依赖注入)入门例子--属性注入”中,我们将关注如何通过属性注入来管理依赖。 属性注入是指Spring容器将一个对象的属性值设置为另一个对象的引用。这通常用于将服务对象注入到需要使用它们的...

    JavaEE spring 依赖注入DI入门案例

    JavaEE spring 依赖注入DI入门案例

    “IOC容器与DI依赖注入示例”文章提及

    在Java世界中,Spring框架是应用最广泛的轻量级企业级开发框架,它的一大核心特性就是Inversion of Control(控制反转,简称IOC)和Dependency Injection(依赖注入,简称DI)。这两者是紧密相关的概念,有助于简化...

    Spring_01_入门篇_依赖注入(控制反转)_XML

    在`Spring_01_入门篇_依赖注入(控制反转)_XML`中,我们可以看到一个或多个XML配置文件,它们定义了bean的定义,包括bean的类名、属性以及它们之间的依赖关系。例如: ```xml ``` 在这个例子中,`exampleBean`...

    Spring_01_入门篇_依赖注入(控制反转)_ANN

    在"Spring_01_入门篇_依赖注入(控制反转)_ANN"的学习过程中,你可以首先了解Spring的基本概念和IoC/DI原理,然后通过注解驱动的配置来实践创建和管理bean。接着,逐步探索三层架构的实现,从编写DAO、Service到...

    一本很不错的关于spring入门的书籍

    Spring框架是中国乃至全球开发者广泛使用的Java企业级应用开发框架,尤其在轻量级、依赖注入(DI)和面向切面编程(AOP)方面表现出色。这本书籍“一本很不错的关于spring入门的书籍”显然是针对初学者设计的,旨在...

    Spring项目IOC入门案例、Spring项目DI入门案例的代码

    本文将深入探讨Spring的核心概念——依赖注入(Dependency Injection,简称DI)和控制反转(Inversion of Control,简称IOC),并结合提供的"Spring项目IOC入门案例、Spring项目DI入门案例的代码"进行详细解析。...

    Spring 入门代码实例

    Spring框架是Java开发中不可或缺的一部分,它以其强大的依赖注入(Dependency Injection,简称DI)特性,简化了对象的创建和管理,实现了松耦合,使得代码更加灵活和易于测试。在这个“Spring 入门代码实例”中,...

    spring 入门基础

    它的主要目标是简化Java EE(Enterprise Edition)应用的开发,通过依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented Programming, AOP)使代码更易于测试和管理。 2. **JAVA对象的产生与管理...

    Spring入门案例

    总的来说,"Spring入门案例"旨在帮助初学者理解Spring的基本原理和使用方式,包括但不限于Bean的定义与管理、依赖注入的实现、以及Spring如何简化企业级应用的开发。通过深入学习和实践这个案例,你将能够更好地掌握...

    spring入门学习-2、IOC、DI知识.pdf

    #### 四、DI依赖注入的几种方式 ##### 1. XML配置文件注入 XML配置文件注入是Spring早期版本中最常用的一种依赖注入方式。它可以分为两种类型: - **设值注入(Setter Injection)** - 在XML配置文件中,通过`...

    spring入门经典源代码

    2. **依赖注入(Dependency Injection, DI)** DI是Spring的核心,它允许开发者将对象之间的依赖关系解耦,使得组件之间松散耦合。通过Spring容器管理对象的生命周期和依赖关系,可以更方便地进行单元测试和维护。 ...

    Spring 入门案例

    Spring 提供了一个全面的编程和配置模型,用于现代Java后端应用,特别强调依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)。 **依赖注入** 依赖注入是Spring的核心特性...

    Spring入门书籍.pdf

    ### Spring入门书籍知识点总结 #### 一、Spring框架概述 **Spring** 是一个开源的Java应用框架,旨在简化企业级应用程序开发。它提供了一个全面的编程模型,支持从Web层到业务逻辑层的各种应用场景。 #### 二、...

    spring入门上手小例子

    Spring框架是Java开发中最常用的轻量级框架之一,它的核心特性是依赖注入(Dependency Injection,简称DI)和面向切面编程(Aspect Oriented Programming,简称AOP)。本篇将详细介绍这两个关键概念及其在Spring中的...

    spring 入门教程

    ### Spring入门教程详解 #### 一、Spring框架概述 Spring框架是由Rod Johnson创建的一个开源框架,旨在简化企业级Java应用程序的开发。它提供了一种优雅的方式来处理依赖管理和控制反转(Inversion of Control, ...

    spring依赖注入

    Spring依赖注入是Java开发中的核心概念,特别是在使用Spring框架时,它是实现松耦合和可测试性的重要机制...在资源"firstspring"中,很可能是对Spring框架入门学习的资料,涵盖了如何在实践中运用依赖注入的基本知识。

    IDEA中使用Spring的简单入门(加小案例)

    为了更好地理解Spring,你需要熟悉Spring的核心概念,如依赖注入(DI)。DI允许你在不手动创建对象的情况下管理对象的生命周期,而是由Spring容器负责。例如,在`HelloController`中,如果需要其他服务,可以使用`@...

    spring入门实例

    Spring框架是Java开发中广泛应用的一个开源框架,以其依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented Programming, AOP)的核心特性,极大地简化了企业级应用的开发工作。在这个"spring入门...

Global site tag (gtag.js) - Google Analytics