1.Spring提供2种Ioc容器的实现,基础的实现是BeanFactory,高级的实现是Application Context,它是对BeanFactory的扩展,提供了许多高级的特性,推荐使用Application Context。
BeanFactory的使用
Resource resource = new ClassPathResource("bean.xml") ; //classpath下的bean.xml
//FileSystemResource InputStreamResource UrlResource ClassPathResource....是对Resource的实现
BeanFactory factory = new XmlBeanFactory(resource) ;
Application Context的使用
ApplicationContext appContext = new ClassPathXmlApplication("bean.xml") ;
//ClassPathXmlApplicationContext FileSystemXmlApplicationContext XmlWebApplicationContext
//XmlPortleApplicationContext是对ApplicationContext接口的实现
完整的例子:
ApplicaitonContext constext = new ClassPathXmlApplicationContext("bean.xml"); SequenceGenerator generator = (SequenceGenerator)context.getBean("sequenceGennerator"); Sytem.out.println(generator.getSequence);
3.3 解决构造器歧义
问题:当配置文件的参数适合多个构造器时,那么匹配构造器就会发生歧义
解决方法:<constructor-arg>元素指定的type 和 index 属性
实现方法:
<bean id="xx" class="xx">
<constructor-arg type="java.lang.String" value="30" /> #Spring默认将参数是解释为String类型的
<constructor-arg type="int" value="10" />
<property name="suffix" value="A" />
</bean>
上面例子的问题:Spring中,参数在XML中出现的顺序是不被考虑的,所以上面的配置适合2个构造函数
解决方法:index属性
<bean id="xx" class="xx">
<constructor-arg type="java.lang.String" value="30" index="0"/> #Spring默认将参数是解释为String类型的
<constructor-arg type="int" value="10" index="1" />
<property name="suffix" value="A" />
</bean>
3.4 指定Bean引用
解决方法:<ref>元素或在属性or构造器参数中指定Bean的声明
实现方法:
<bean id="dataPrefixGenerator" class="....">
<property name="pattern" value="yyyyyMMdd" />
</bean>
<bean id="sequenceGenerator" class="...">
<property name=""...
<property name="prefixGenerator"> # the simple way:<property name="xx' ref="xx" />
<ref bean="dataPrefixGenerator" />
</property>
</bean>
// ref元素可以引用任何的Bean,包括在其它配置文件中的Bean
local属性
<property name="xx'> <ref local="dataPrefixGenerator" /> </property>
local属性是对XML ID的引用,此时XML 编辑器可以帮助验证拥有该ID的Bean是否存在于同一个XML文件中
3.4.2为构造器指定Bean引用
<bean id="xx' class="...">
<constructor-arg>
<ref local="dataPrefixGenerator" /> # <constructor-arg ref="dataPrefixGenerator" />
</constructor-arg>
<property name="initial' value="100" />
</bean>
3.4.3 声明内部的Bean 在<property> or <constructor-arg> 不需要设置任何id或name # Bean只在声明处有效
<bean id =........
<property name="prefixGenerator">
<bean class="com..."> .....</bean>
</property>
</bean>
3.5 通过依赖检查来检查属性
3.5.1 问题:IOC中有大量的Bean,此时setter注入的缺点就暴露了,不能保证属性一定会被注入
3.5.2 解决方法:Spring的依赖检查特性可以检查Bean上某些类型的所有属性是否被设置,只需在<Bean>的dependency-check属性指定依赖检查模式。PS:依赖检查属性只能检查属性是否被设置,这与属性值是null的情况,无能为力
dependency-check 属性取值:
none* 默认值,表示所有属性值都不检查
simple 表示如果简单类型(基本类型和集合类型)的属性未被设置,将抛出UnstatisfiedDependencyException
objects 表示对属性是对象类型,但未被设置,将抛出UnstatisfiedDependencyException
all 表示检查所有属性的值,如果未设置,将抛出UnstatisfiedDependencyException
3.5.3 实现方法:
<bean id="xx" class="..." dependency-check="simple"> <property name=".." ..</bean>
3.6通过@Required注解检查属性
3.6.1 问题:Spring的依赖检查特性dependency-check只能检查某些类型的所有属性。它不能针对单个属性进行检查,大多数情况下,只需检查单个属性
3.6.2 解决方法:RequiredAnnotatinBeanPostProcessor是Spring的Bean后置处理器,它会检查所有具有@Required注解的属性是否已被设置。RequiredAnnotatinBeanPostProcessor是一种特殊的Bean,它能够在每个Bean实例化后执行一些额外的工作。要使用RequiredAnnotatinBeanPostProcessor,必须在Ioc容器中注册它。该处理器同样对属性值是null无能为力。
3.6.3 实现方法:
1.在每个setter方法上加上@Required注解
2.在Ioc容器中注册RequiredAnnotatinBeanPostProcessor实例,如果是BeanFactory,则必须使用API注册,如果是ApplicationContext,那么如下: <bean class="org.springframework.beans.fanctoy.annotation.RequiredAnnotatinBeanPostProcessor />
ps:如果是Spring2.5,那么只需在Bean配置文件声明如下:<context:annotation-config />
如果任何具有@Required注解的属性未被设置,该Bean后置处理器将抛出BeanInitializationExceptin
。。。。。。
除了@Required注解,RequiredAnnotatinBeanPostProcessor也可以对 具有用来定制注解的类的属性进行检查。步骤如下:
1.创建注解类型
2.在类的setter方法上应用此注解
3.在RequiredAnnotatinBeanPostProcessor的required-AnnotationType属性里指定该注解类型
<bean class="org.springframework.beans.factory.annotaion.RequiredAnnotatinBeanPostProcessor">
<property name="requiredAnnotationType">
<value>com.xxxx</value>
</property>
</bean>
相关推荐
重构第三步——工厂(Factory)模式的改进 10 重构第四步-IoC容器 11 控制反转(IoC)/依赖注入(DI) 11 什么是控制反转/依赖注入? 11 依赖注入的三种实现形式 12 BeanFactory 14 BeanFactory管理Bean...
在这个过程中,Spring AOP 使用 configBeanDefinitionParser 来解析 AOP 配置文件,并生成相应的 Bean 定义对象。 3. 注册 AutoProxyCreator:在解析 AOP 配置文件时,Spring AOP 也会注册一个 ...
Spring框架_day02笔记 Spring框架是Java平台上一个开源的应用程序框架,用于开发企业级应用程序。该框架提供了一个以Bean为中心的配置文件,并提供了依赖注入(Dependency Injection,DI)机制来管理应用程序中的...
Spring Boot提供了大量的自动配置模块,可以自动配置Spring以及第三方库,如Web开发、数据访问、消息服务等。通过starter的依赖,开发者可以不用编写任何配置代码,快速开始开发,极大地提高了开发效率和项目的启动...
- **Spring1.x时代**:在Spring1.x的时代,主要通过XML文件来配置Bean。随着项目的规模扩大,XML配置文件的数量也随之增加,这导致开发人员需要频繁地在Java代码与XML配置文件之间切换。这种做法虽然能够清晰地区分...
Spring框架是Java开发中的核心组件,它为应用程序提供了一个全面的基础设施,包括依赖注入(DI)、面向切面编程(AOP)以及数据访问等服务。SSM是Spring、SpringMVC和MyBatis的组合,是Java Web开发的常用框架栈。这...
3. **Bean 的生命周期**:在 Spring 中,每个由容器管理的对象被称为 Bean。笔记会介绍 Bean 的创建、初始化、使用和销毁等生命周期阶段,以及如何通过配置控制这些过程。 4. **依赖注入**:Spring 支持构造器注入...
基于条件注解(@Conditional),Spring Boot会根据类路径中的jar包和配置文件自动配置相应的bean。例如,如果类路径下存在HSQLDB数据库,那么Spring Boot就会自动配置一个内存数据库。 3. **嵌入式Web服务器...
在Spring框架中,自动扫描和管理Bean是一种便捷的方式,它允许开发者无需显式配置每个Bean,而是通过指定包路径来让Spring自动发现和管理Bean。本文将深入探讨这个主题,帮助你更好地理解和应用这一功能。 首先,让...
**JSF2整合Spring3——JSF学习笔记4** 在Java服务器端开发中,JavaServer Faces(JSF)和Spring框架都是重要的技术。JSF是一个用于构建用户界面的MVC(Model-View-Controller)框架,而Spring则是一个全面的企业级...
`spring_ioc.txt`可能详细解释了如何定义Bean、Bean的初始化和销毁方法,以及如何通过XML和Java配置实现IOC。 2. **面向切面编程(AOP)**: AOP允许在不修改业务代码的情况下,实现如日志记录、性能监控等横切关注...
Spring_IOC-v(上)笔记是关于 Spring 框架中的 IoC(控制反转)技术的笔记,主要介绍了 IoC 的概念、依赖注入、Bean 的设置、Spring 组件的管理等知识点。 IoC 技术是 Spring 框架的核心概念之一,它的主要思想...
1. **Spring框架概述**:Spring是一个开源的Java平台,提供了一个全面的编程和配置模型,支持构建更简洁、更易于测试和维护的应用程序。它强调了代码的可测试性,通过模块化设计,使得开发者可以只关注业务逻辑,而...
自动配置是基于`@EnableAutoConfiguration`注解实现的,该注解会根据项目中的依赖项自动配置相应的Bean。例如,如果项目中有`spring-web`依赖,Spring Boot就会自动配置一个DispatcherServlet。 **二、起步依赖** ...
在Spring中,应用程序的组件被称为Bean,这些Bean被定义在配置文件中,由Spring容器管理其生命周期,包括实例化、初始化、装配和销毁。Bean可以通过XML、注解或者Java配置来定义。 五、Spring MVC Spring MVC是...
在Spring中,bean的注入与装配是核心概念之一,有多种方式可以实现,例如XML配置、通过get和set方法、构造函数或是注解。使用注解是一种简洁的方法,Spring提供了大量注解来简化开发,如@Autowired、@Component、@...
《精通Spring(第一版)》笔记:第一章 Spring启程 在深入探讨Spring框架之前,我们需要先理解Spring的基本概念和核心特性。Spring是一个轻量级的Java企业级应用框架,它提供了一个全面的编程和配置模型,旨在简化...
1. **自动配置**:Spring Boot通过扫描特定的类路径和在`@SpringBootApplication`注解的类中寻找`@EnableAutoConfiguration`注解,自动配置Spring容器中的Bean。这使得开发者无需手动编写大量的XML配置文件。 2. **...