`

Spring IOC 笔记

阅读更多
依赖注入的3种方式
接口注入type1 设置属性注入type2 构造方法注入type3

spring的IOC容器,事实上就是一个实现了BeanFactory接口的可实例化类,
BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("application.xml"));

ApplicationContext还提供了国际化支持,时间的发布和通知机制等
ApplicationContext context = new ClassPathXmlApplicationContext("application.xml");


BeanFactory在getBean时才实例化,ApplicationContext在初始化时就验证所有的XML文件的正确性

支持注解方式注入
<context:component-scan base-package="demo"/>

注释配置和 XML 配置的适用场合
1.注释配置不一定在先天上优于 XML 配置。如果 Bean 的依赖关系是固定的,(如 Service 使用了哪几个 DAO 类),这种配置信息不会在部署时发生调整,那么注释配置优于 XML 配置;反之如果这种依赖关系会在部署时发生调整,XML 配置显然又优于注释配置,因为注释是对 Java 源代码的调整,您需要重新改写源代码并重新编译才可以实施调整。
2.如果 Bean 不是自己编写的类(如 JdbcTemplate、SessionFactoryBean 等),注释配置将无法实施,此时 XML 配置是唯一可用的方式。
3.注释配置往往是类级别的,而 XML 配置则可以表现得更加灵活。比如相比于 @Transaction 事务注释,使用 aop/tx 命名空间的事务配置更加灵活和简单。

所以在实现应用中,我们往往需要同时使用注释配置和 XML 配置,对于类级别且不会发生变动的配置可以优先考虑注释配置;而对于那些第三方类以及容易发生调整的配置则应优先考虑使用 XML 配置。Spring 会在具体实施 Bean 创建和 Bean 注入之前将这两种配置方式的元信息融合在一起。

==============================================================================================================

注入Resource资源
前缀说明示例
classpath:从classpath加载该资源classpath:config.xml
http:作为URL加载该资源http://java.sun.com
file:作为URL加载该资源file:///C:/windows
根据具体的ApplicationContext判断test.txt

public class ResourceBean {

	private UrlResource urlResource;
	
	private ClassPathResource classPathResource;
	
	private FileSystemResource fileSystemResource;

	public void setUrlResource(UrlResource urlResource) throws IOException {
		this.urlResource = urlResource;
		System.out.println(urlResource.getURL());
	}

	public void setClassPathResource(ClassPathResource classPathResource) throws IOException {
		this.classPathResource = classPathResource;
		System.out.println(classPathResource.getFile());
	}

	public void setFileSystemResource(FileSystemResource fileSystemResource) {
		this.fileSystemResource = fileSystemResource;
		System.out.println(fileSystemResource.getFile());
	}
}

	 <bean id="resourceBean" class="demo.ResourceBean">
	 	<property name="classPathResource" value="classpath:application.xml"/>
	 	<property name="urlResource" value="http://www.iteye.com"/>
	 	<property name="fileSystemResource" value="c:/windows/notepad.exe"/>
	 </bean>

ApplicationContext context = new FileSystemXmlApplicationContext("classpath:application.xml");
//c:/windows/notepad.exe将被转化为一个ClassPathResource
//ApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
ResourceBean resourceBean = (ResourceBean) context.getBean("resourceBean");



==============================================================================================================

Bean的作用域
singleton:开发人员书写的仍是一个普通的Bean,spring并不能阻止应用程序自行的new对象,不应试图在spring容器外部自行创建Bean
prorotye:spring容器一旦将实例new出来交给客户端,就不再对其跟踪引用,所以无法对prototype作用域的Bean定义destroy-method,不过仍可定义init-method


==============================================================================================================

配置工厂Bean
应用程序需要使用自己的工厂对象来创建Bean,如果将这一功能也交给spring容器,spring容器管理的就不是普通的Bean实例,是“工厂”实例,暂且称为“工厂Bean”

context.getBean(xxx);
实际上获得的不是配置文件中 id="xxx" 的bean,而是这个bean的getBean()方法返回的bean
静态工厂:用的极少

实例工程:首先实例化工厂对象,然后才能调用工厂对象的成员方法,这往往因为对象的创建还依赖于工厂实例的内部状态。
public class InstanceFactoryBean {

	private String format;

	public void setFormat(String format) {
		this.format = format;
	}
	
	public String createTime(){
		return new SimpleDateFormat(format).format(new Date());
	}

<bean id="instanceFactoryBean" class="demo.InstanceFactoryBean">
	<property name="format" value="yy-MM-dd"/>
</bean>
<bean id="currentTime" factory-bean="instanceFactoryBean" factory-method="createTime"/>


实现FactoryBean接口
public class PIFactoryBean implements FactoryBean{

	public Object getObject() throws Exception {
		return new Double(3.1415926);
	}

	public Class getObjectType() {
		return Double.class;
	}

	public boolean isSingleton() {
		return true;
	}

<bean id="pi" class="demo.PIFactoryBean"/>

context.getBean("pi") //3.1415926
context.getBean("&pi") //PIFactoryBean


常用的FactoryBean
JndiObjectFactoryBean proxyFactoryBean TransactionProxyFactoryBean LocalSessionFactoryBean


==============================================================================================================

自动装配
不用写property @Resource @Autowired
模板装配
<bean abstract="true"....../>
<bean parent=""...../>




==============================================================================================================

定制Bean
获取Bean的信息实现了BeanNameAware接口
获取容器    实现ApplicationContextAware接口
BeanPostProcessorBean初始化的过程会被截获 创建Bean实例->设置Bean属性->Bean自身回调->postProcessBeforeInitialization->调用Bean初始化->调用postProcessAfterInitialization->初始化完成有能力在spring容器对Bean初始化前后对所有Bean进行检查和修改
检查依赖注入@Required
BeanFactoryPostProcessor在spring容器对所用的Bean初始化之前,对Bean的定义做一些修改
使用外部属性文件PropertyPlaceholderConfiger
发布和接受事件发布:ApplicationContext的publishEvent()方法。接受:onapplicationEvent()方法
容器的继承实现HierarchicalBeanFactory接口  new ClassPathXmlApplicationContext(new String[]{"xxxxx.xml"}, parent)
定制属性编辑器类名+Editor 继承PropertyEditorSupport 重写setAsText方法

分享到:
评论

相关推荐

    Spring-IOC笔记

    spring-IOC的一些笔记心得

    Spring_IOC-v(上)笔记

    Spring_IOC-v(上)笔记 Spring_IOC-v(上)笔记是关于 Spring 框架中的 IoC(控制反转)技术的笔记,主要介绍了 IoC 的概念、依赖注入、Bean 的设置、Spring 组件的管理等知识点。 IoC 技术是 Spring 框架的...

    springIOC笔记整理(分章节)

    Spring 的核心特性包括依赖注入(DI,Dependency Injection)和面向切面编程(AOP),这两者都是控制反转(IoC,Inversion of Control)理念的体现。Spring 作为一个开源的 IoC 容器,它负责管理和协调应用对象的...

    SpringIOC+SpringMVC学习笔记

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

    SpringIOC案例代码笔记2

    SpringIOC的具体实现代码可以配合着博客做参考 这个Demo中主要使用的是注解配置

    Spring AOP IOC源码笔记.pdf

    本笔记将深入探讨这两个概念以及它们在Spring中的实现。 1. Spring框架简介: Spring作为一个轻量级的开源框架,旨在简化企业级应用的开发。它通过提供IOC容器,实现了对象的创建、管理和依赖注入,减轻了开发者对...

    Spring_IoC入门笔记.md

    依赖注入:Dependency Injection IOC的作用:降低程序间的偶合(依赖关系) 依赖关系的管理:以后都交给spring来维护 ... ref:用于指定其他bean类型数据,它所指的是在spring的IOC容器中出现的bean

    笔记28-JAVAEE之Spring IoC&DI

    JAVAEE之Spring IoC&DI Spring IoC(Inversion of Control,即控制反转)是Spring框架的核心机制之一,它提供了一种解耦合的方式,使得应用程序的各个组件之间能够松散耦合,提高了系统的灵活性和可维护性。 在传统...

    spring ioc aop mvc boot-学习笔记.docx

    Spring框架是Java开发中不可或缺的一部分,它为开发者提供了强大的依赖注入(IOC)和面向切面编程(AOP)功能,以及用于构建Web应用程序的MVC框架。Spring Boot则是基于Spring框架构建的应用程序启动器,旨在简化...

    SpringIOC案例代码笔记

    SpringIOC的具体实现代码可以配合着博客做参考 这个Demo中主要使用的是XML方式配置

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

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

    spring ioc aop基础理论实践笔记

    1,spring是一个开源的免费的框架(容器)。 2,spring是一个轻量级的,非入侵式的框架。 ​ 非入侵式:就是项目引入了这个框架之后,...总结:spring就是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的框架。

    spring-note spring 读书笔记

    Spring框架是Java开发中不可或缺的一部分,它以其强大的依赖注入(IOC)和面向切面编程(AOP)功能闻名。这份"spring-note spring 读书笔记"深入探讨了Spring的核心概念以及如何与其他流行技术如JDBC、Hibernate、...

    Spring-IoC 复习笔记.rar

    **Spring-IoC 复习笔记** Spring 框架是 Java 开发中不可或缺的一部分,其核心特性之一就是依赖注入(Dependency Injection,简称 DI),也称为控制反转(Inversion of Control,简称 IoC)。IoC 是一种设计模式,...

    马士兵Spring课堂笔记(超级详细版).pdf

    马士兵Spring课堂笔记(超级详细版) 本资源主要讲解了Spring框架的基础概念和应用,涵盖了面向接口编程、IOC/DI、AOP、Spring应用IOC/DI、Spring应用AOP、Struts2.1.6 + Spring2.5.6 + Hibernate3.3.2整合、Spring...

    Spring IOC和AOP代码与笔记整理

    Spring框架是Java开发中不可或缺的一部分,它以IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)为核心,极大地简化了企业级应用的开发工作。本篇将深入探讨Spring的这两...

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

    2. **容器(IoC Container)**:Spring容器负责创建对象、管理对象的生命周期以及维护对象间的依赖关系。主要有两种类型的容器:BeanFactory和ApplicationContext。 3. **面向切面编程(Aspect-Oriented ...

    Spring学习笔记&源码

    Spring框架是Java开发中不可或缺的一部分,它以其IoC(控制反转)和AOP(面向切面编程)的核心特性,极大地简化了企业级应用的开发。本资料“Spring学习笔记&源码”是基于网易云课堂黑马程序员的Spring四天精通课程...

Global site tag (gtag.js) - Google Analytics