在xml文件中通过bean节点来配置bean
<bean id=”helloWordl” class=”com.cy.test.HelloWorld”></bean>
id:bean的名称
在ioc容器中必须是唯一的。
若id没有指定,spring自动将权限定性类名作为bean的名字。
id可以指定多个名字,名字之间用都好,分毫,或者空格分隔。
Spring IOC容器
在ioc容器读取bean配置创建bean实例之前。必须对它进行实例化。只有在容器实例化后,才可以从IOC容器里获取Bean的实例并使用。
spring提供了两种类型的ioc容器实现。
BeanFactory ioc容器的基本实现
ApplicationContext 提供了更多的高级特性,是BeanFactory的子接口。
BeanFactory 是spring框架的基础设施,面向spring本身。
ApplicationContext面向使用Spring框架的开发者,几乎所有的应用场合都直接使用ApplicationContext二分BeanFactory
ApplicationContext 的主要实现类
ClassPathXmlApplicationContext:从类路径下加载配置文件。
FileSystemXmlApplicationContext:从文件系统中加载配置文件。
ConfigurableApplicationContext:扩展与ApplicationContext 新增两个主要方法refresh()和close()/在AppplicationContext具有启动,刷新和关闭上下文的能力。
ApplicationContext在初始化上下文的时候就实例化所有单例的Bean
WebApplicationContext是专门为web应用而准备的,它允许从相对于web根目录的路径中完成初始化工作。
从IOC容器中获取Bean
ApplicationContext的getBean()方法;
依赖注入的方式
属性注入
构造器注入
工厂方法注入(很少使用,不推荐)
属性注入
属性注入即通过setter方法注入Bean的属性值或者以来的对象
属性注入使用<property>元素,使用name属性指定Bean的属性名称,value或者<value>子节点指定属性值,
<bean id=”helloworld” class = “cy.test.HelloWorld”>
<property name=”userName” value=”test”></property>
</bean>
构造注入
通过构造方法注入Bean的属性或者依赖的对象,它保证了Bean实例在实例化后就可以使用。
构造器注入在<constructor-arg>元素里申明属性,没有name属性。
引用其他Bean
组成应用程序的Bean经常需要互相协作以完成应用程序的功能,要使Bean能够相互访问,就必须在Bean配置文件中指定对Bean的引用。
在Bean配置文件中,可以通过<ref>元素或ref属性为Bean的属性或构造参数对Bean的引用。
也可以在属性构造器里包含bean的申明。这样子的bean称为内部bean
<bean id=”service” class=”com.cy.test.service”></bean>
<bean id=”action” class=”com.cy.test.action”>
<property name=”service” ref=”service”></property>
</bean>
内部bean
当bean实例仅仅给一个特定的属性使用时,可以将其声明为内部bean 内部bean申明直接包含在<property>或者<construct-arg>元素里。不需要设置任何id或name属性。内部bean不能使用在其他任何地方。(没有id或者name引用)
集合属性
在spring中可以通过一组内置的xml标签<list><set><map>来配置集合属性