`

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 spring 依赖注入DI入门案例

    JavaEE spring 依赖注入DI入门案例

    Spring从入门到入土——依赖注入(DI)

    DIDependency Injection概念注入方式...Spring从入门到入土——依赖注入(DI) Spring从入门到入土——Bean的作用域 Dependency Injection 概念 依赖注入(DI) 依赖:指Bean对象的创建依赖于容器。Bean对象的依赖资

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

    此文档仅供初学者学习,包括Spring的依赖注入(控制反转)的详细实例。以三层贯穿实例(持久层、业务层、控制层),由MAIN方法直接调用测试用例。

    spring入门上手小例子

    spring入门上手小例子,包括最基本最简单的的依赖注入和aop编程例子。

    基于框架的Web开发-IoC(控制反转)和DI(依赖注入)入门.doc

    1.2 IoC(控制反转)和DI(依赖注入)入门 1 传统的Java类 在工程下创建包ioc,在ioc包中创建类Test。(为了看起来清楚,将三个类写在了同一个Java文件中,其中唯一的public类为Test)。类的含义和关系如下: Car类...

    Spring框架控制反转IOC和依赖注入DI详解

    本文介绍了Spring框架中的控制反转IOC和依赖注入DI,欢迎阅读,共同学习,一起进步。 Spring框架基础参考:深入学习Spring基础 文章目录一.入门程序和IOC简介二.IOC-控制反转三.DI-依赖注入四. IOC和DI五.Spring...

    Spring IOC的快速入门案例

    Spring IOC的快速入门案例 &gt;下载Spring的开发包 ...&gt;理解IOC控制反转和DI依赖注入 &gt;编写Spring核心配置文件 &gt;在程序中读取Spring配置文件,通过Spring框架获得Bean,完成相应操作 Spring 4.x的目录结构  

    千锋JavaEE精讲之Spring框架实战教程

    课程简介:  这门课程主要讲Spring的核心概念和基本使用。...详细介绍了对象创建的细节和依赖注入的几种方式;介绍了如何使用注解完成Spring的相关 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    java视频教程:spring框架精讲附加实战项目练习

    详细介绍了对象创建的细节和依赖注入的几种方式;介绍了如何使用注解完成Spring的相关功能;介绍了如何借助于Spring搭建JUnit测试环境;详细介绍了什么是AOP,以及AOP的基本示例;介绍了如何使用Spring中的JDBC模块...

    spring-zwz.zip

    spring一篇入门博文的配套资源,包含了第一个spring程序、IOC控制反转、DI依赖注入、静态代理、动态代理、AOP面向切面编程等源代码

    Spring从入门到入土——Bean的作用域

    Spring从入门到入土——依赖注入(DI) Spring从入门到入土——Bean的作用域 Bean的作用域 ​ 在Spring中,那些组成应用程序的主体及由Spring IoC容器所管理的对象,被称之为bean。简单地讲,bean就是由IoC容器初始...

    javaSpring学习笔记

    在“Java Spring学习笔记”中,你将找到对Spring框架的全面介绍,包括IoC(控制反转)和DI(依赖注入)原理、AOP(面向切面编程)、Spring MVC、Spring Boot等核心内容。每个主题都结合了理论知识和实际示例,帮助你...

    开源框架 Spring Gossip

    管理 Bean 从第一个 Spring 应用程式开始,逐步了解何谓依赖注入,以及如何使用 Spring 的容器功能来管理 Bean,了解 Bean 在 Spring 容器中的生命周期。 第一个 Spring 程式 BeanFactory、 ...

    spring文档整理

    我搜集的spring资料:spring 2.5 中文文档,spring 2.0中文文档,di和ioc文章,spring开发指南,spring入门书籍,spring揭秘精编版

    Java/spring相关资源,一文带你入门spring的世界,给你讲透核心组件

    Spring框架是Java EE应用开发中最流行的轻量级框架之一,它简化了企业级应用的开发过程,尤其是对于依赖注入(DI)、面向切面编程(AOP)、事务管理等方面有着强大的支持。

    SpringSecyrity入门demo

    它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制...

    JSF2.0快速入门的基本教程.ppt

    整个过程是通过“依赖注入(DI)”来实现的,看来这是目前解偶合的最佳途径啊,spring的影响真是深远。不过正式因为jsf采用了这样的方式,导致开发工作和以前的jsp/struts等都有非常大的不同,需要一定的时间去学习。...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    10.2.2 依赖注入(DI) 10.3 利用Spring在JSP页面输出“HelloWorld”的示例 10.3.1 建立myHelloWorld工程 10.3.2 编写JSP页面helloWorld.jsp 10.3.3 编写控制器HelloWorldController.java 10.3.4 建立Spring的配置...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    10.2.2 依赖注入(DI) 10.3 利用Spring在JSP页面输出“HelloWorld”的示例 10.3.1 建立myHelloWorld工程 10.3.2 编写JSP页面helloWorld.jsp 10.3.3 编写控制器HelloWorldController.java 10.3.4 建立Spring的配置...

    spring3.2入门到大神(备java基础、jsp、servlet,javaee精髓)

    框架介绍,IoC思想、DI依赖注入、Bean的实例方式、Bean种类、Bean作用域范围、Bean生命周期管理、依赖注入、注解装配Bean、整合Junit测试、WEB开发集成spring、AOP思想、AOP原理解剖、spring 传统aop开发、...

Global site tag (gtag.js) - Google Analytics