`
annegu
  • 浏览: 99609 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Spring学习笔记之IoC

阅读更多
Spring是指一个用于构造java应用程序的轻量级框架。Spring框架的核心基于“控制反转(Inversion of Control, IoC)”的原理。

IoC是一种将组件依赖关系的创建和管理置于程序外部的技术。



1、在依赖托拽中,依赖关系是根据需要从一个集中的注册处获取的。
如:
BeanFactory factory = new XmlBeanFactory(new FileSystemResource(config.getServletContext().getRealPath("") + "/WEB-INF/classes/spring/applicationContext.xml"));
AdvDao advDao = (AdvDao)factory.getBean("advDao"); 


而上下文配置依赖查找是在容器管理的资源中进行查找的。
如:
	public void perFormLoopup(Container container) {
		AdvDao advDao = container.getAdvDao("advDao");
	}



2、构造器依赖注入是在组件的构造器处提供依赖关系的注入,这种组件声明一个构造器或者一组构造器从构造参数中获取依赖关系。
如:
public class TestJob implements TestInterface{
	private String message;
	
	public TestJob(){		
	}	
	public TestJob(String message){
		this.message = message;
	}
	
	public String getMessage(){
		return message;
	}
	
	@Override
	public void print() {	
		System.out.println(getMessage());
		System.out.println("This is TestJob!");		
	}

}

构造器依赖注入的bean配置:
<bean id="testJob" class="con.anne.test.TestJob">
		<constructor-arg>
			<value>This is a configurable message</value>
		</constructor-arg>
</bean>



3、Setter注入:
如:
public class AdvDaoImpl implements AdvDao {
	private JdbcTemplate jdbcTemplate;

	public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
		this.jdbcTemplate = jdbcTemplate;
	}
}

通过xml支持来配置setter依赖注入,需要在<bean>节点下指定<property>。如:
<bean id="advDao" class="com.anne.dao.impl.AdvDaoImpl">
	<property name="dataSource">
		<ref local="dataSource"/>
	</property>
</bean>



4、对比构造器注入与setter注入:
一般推荐setter注入。
在使用组件之前就需要实例化存在依赖关系的类的时候,构造器注入特别有用。因为setter方法的调用次序是无法规定的,在使用组件之前,也许并非所有必要的setter方法都会被调用到。
在以下情况时,setter注入更具有优势:
① 对象需要配置的熟悉比较多。
② 对象既有简单类型的依赖,也有与对象的依赖。
③ 对象有可能位于具体继承体系中。
④ 对象有多于一个统一类型的依赖关系。
⑤ 对象必须提供运行时修改依赖关系的途径。

5、依赖注入容器的核心时Bean工厂。
Spring提供了两个主要的BeanFactory的实现,一个是DefaultListableBeanFactory,还有一个是XmlBeanFactory。
对于DefaultListableBeanFactory来说,会使用PropertiesBeanDefinitionReader从一个properties文件中读取Bean的定义信息。
public class BeanFactoryTest {
	
	public static void main(String[] args) throws Exception {
		BeanFactory factory = getBeanFactory();
		TestJob testJob = (TestJob)factory.getBean("testJob");
		testJob.print();
	}

	private static BeanFactory getBeanFactory() throws Exception {
		DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
		PropertiesBeanDefinitionReader reader = new PropertiesBeanDefinitionReader(factory);
		
		Properties props = new Properties();
		props.load(new FileInputStream("/config/beans.properties"));
		
		reader.registerBeanDefinitions(props);
		return factory;
	}

}

而对于XmlBeanFactory来说,则使用XmlBeanDefinitionReader从XML文件中读取bean。
XmlBeanFactory派生于DefaultListableBeanFactory并简单的进行了扩展,使它能够通过XmlBeanDefinitionReader自动获取配置信息。
//use XmlBeanFactory
XmlBeanFactory xmlFactory = new XmlBeanFactory(new FileSystemResource("/config/beans.xml"));



6、需要注意的:
① 默认情况下,Spring中的所有bean都是单例的,Spring维护bean的唯一实例,对bean工厂的getBean()方法的每一次调用都返回同一个实例。
即:
<bean id="advDao" class="com.anne.dao.impl.AdvDaoImpl" singleton="true">
	<property name="dataSource">
		<ref local="dataSource"/>
	</property>
</bean>

把singleton="true"改为singleton="false",就可把单例转换为非单例。
② Spring支持四种装配模式:通过命名,通过类型,构造器,自动检测。
配置bean的属性autowire="byName",那么Spring会将每个属性连接到一个同名的bean上。
③ bean也可以继承属性。
给bean配置上parent="parentBean"即可。
Bean的继承不需要符合java的继承层次关系。应该把bean继承看作模板的功能,而不是实际的继承功能。
  • 大小: 6 KB
分享到:
评论

相关推荐

    Spring学习笔记(精华全记录)

    ### Spring学习笔记(精华全记录) #### Spring框架概述 Spring框架源自Rod Johnson的个人项目,最初于2002年末发布。Spring并非一开始就作为一个完整的框架出现,而是从一个项目逐步发展而来。随着项目的成熟,...

    Spring学习笔记&源码

    本资料“Spring学习笔记&源码”是基于网易云课堂黑马程序员的Spring四天精通课程,旨在帮助学习者深入理解和实践Spring框架。 笔记部分可能会涵盖以下内容: 1. **Spring概述**:介绍Spring框架的历史、特点和主要...

    Spring学习笔记+学习源码.zip

    这份"Spring学习笔记+学习源码.zip"资源包含了深入学习Spring及其相关技术的知识点,以及实践代码,对提升Spring技能将大有裨益。 首先,我们来详细讨论Spring框架的主要组件和功能: 1. **依赖注入(Dependency ...

    SpringIOC+SpringMVC学习笔记

    个人学习spring框架时记录的笔记,纯手敲,SpringIOC+SpringMVC学习笔记,有兴趣的可以参考

    javaSpring学习笔记

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

    学习Spring笔记_IoC(控制反转)简介

    **Spring框架中的IoC(控制反转)概念** 在软件开发中,IoC(Inversion of Control,控制反转)是一种设计模式,它将对象的创建和管理责任从代码中剥离出来,交由一个容器来处理。Spring框架是Java平台上的一个核心...

    Spring框架学习笔记

    这份"Spring框架学习笔记"涵盖了Spring框架的基础知识、核心组件以及高级特性,对于初学者来说是一份宝贵的资料。 一、Spring框架概述 Spring框架是为了解决企业应用开发的复杂性而设计的,它提供了一个全面的基础...

    Spring自学笔记-Ioc(控制反转)容器

    ### Spring自学笔记-Ioc(控制反转)容器 #### 一、Spring框架简介 Spring框架是一个开源的Java平台,用于构建企业级应用。它提供了一种轻量级的方式来管理应用程序的各种组件和服务,使得开发者能够更容易地构建...

    Spring学习笔记.doc

    ### Spring学习笔记知识点详解 #### 一、Spring框架概述 **1.1 什么是Spring** Spring框架是一个开源的轻量级应用框架,主要用于简化企业级应用程序的开发过程。它的核心特性在于提供了一种灵活的方式来组织和...

    spring学习笔记

    ### Spring学习笔记知识点详解 #### 一、Spring框架概述 **Spring** 是一个开源的、分层的企业级应用开发框架,旨在简化Java EE应用程序的开发。它的主要目标是提高开发效率,减少耦合度,并提供一种更为简洁的...

    Spring学习笔记之一“why spring”

    这篇"Spring学习笔记之一“why spring”"可能探讨了为何开发者会选择Spring作为他们的技术栈。让我们深入了解一下Spring框架的核心优势和特性。 首先,Spring是轻量级的。尽管它提供了众多功能,但核心容器(如IoC...

    Spring 学习笔记 spring帮助文档

    在本篇Spring学习笔记中,我们将深入探讨Spring的基本概念,包括bean的配置、依赖注入、IOC容器以及Bean的实例化方式。 首先,Spring中的核心概念是bean。Bean是Spring框架中的基本构建块,它们是被管理的对象,...

    SPRING学习笔记2

    Spring学习笔记2涵盖了Spring框架的核心概念和重要特性,旨在帮助开发者深入理解并熟练掌握Spring的使用。 1. **依赖注入(Dependency Injection, DI)**:这是Spring最核心的设计原则,它允许对象之间的依赖关系在...

    Spring学习笔记

    Spring学习笔记Spring spring的配置 IOC 依赖注入 基于Xml的注入 基于注释的注入 Spring的自动注入和属性自动注入 AOP 静态代理 动态代理 使用spring实现AOP 基于Annotation实现AOP 基于XML实现AOP ...

    spring框架学习笔记

    Spring框架是Java应用开发中广泛使用的轻量级框架,它以IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)为核心,提供了丰富的功能,包括但不限于组件管理、AOP(Aspect Oriented ...

    马士兵老师spring框架学习笔记

    2. **IoC(控制反转)**:Spring的核心特性之一是依赖注入(Dependency Injection,简称DI),它是控制反转的一种实现方式。DI允许我们不直接在类内部创建对象,而是通过配置文件或注解来管理对象及其依赖关系,降低...

Global site tag (gtag.js) - Google Analytics