1、spring可以从官方站点下载:http://www.springframework.org。所需spring.jar和 commons-logging.jar。
IOC全称为Inversin of Control,译控制反转。
依赖注入的3种主要方式:构造方法注入、属性注入、接口注入。
Spring提供强大的IOC容器,支持属性注入和构造方法注入两种。
2、BeanFactory采用的是工厂模式,实现了BeanFactory接口类负责创建并配置所有Bean.应用程序将Bean创建和配置完全委托给BeanFactory,然后从BeanFactory获取使用Bean;
启动应用程序
↓
实例化BeanFactory → 获取xml配置文件
↓
从BeanFactory中获取Bean并使用
↓
销毁BeanFactory → 销毁Bean
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="hello"
class="example.chapter1.helloworld.HelloWorldImpl">
<property name="name" value="Spring"></property>
</bean>
</beans>
①Spring提供几种BeanFactory实现,最常用的是XmlBeanFactory。最简单方法从本地加载xml配置文件。BeanFactory factory=new BeanFactory(new FileSystemResoure("config.xml"));
②使用ClassPath定位XML更为方便,只需确保XML配置文件位于ClassPath路径内
BeanFactory factory=new BeanFactory(new ClassPathResource("config.xml");
在获取BeanFactory后就可以获取Bean实例
③使用ApplicationContext
ApplicationContext context=new ClassPathXmlApplicationContext("config.xml");
HelloWorld hello = (HelloWorld) beanfactory.getBean("hello");
3、装配Bean
告知Spring容器如何创建并配置Bean的方式XML每个<bean>节点配置,对于对下ExampleBean:
package example.chapter;
public class ExampleBean{
private List list;
private int size=100;
pivate String version;
public void setSize(int size){
this.size=size;
}
public void setVersion(String version)
{
this.version=version;
}
public void init(){
list=new ArrayList(size);
}
}
需要size和version两个属性,然后调用init方法完成初始化
<bean id="exampleBean" class="example.chapter.ExampleBean" init-metod="init">
<property name="size" value="10"/>
<property name="version" value="1.0_beta"/>
</bean>
4、各种注入类型
①注入基本类型
通过set方法可以注入指定的属性值:
package example.chapter;
import java.net.URL;
public class BasicBean {
private String title;
public void setUseCache(boolean useCache) {}
public void setMaxSize(int size) {}
public String getTitle() { return title; }
public void setTitle(String title) {this.title = title;}
public void setFile(URL url) {
System.out.println(url);
}
}对就XML配置片段如下:
<bean id="basicBean" class="example.chapter.BasicBean">
<property name="useCache" value="true" />
<property name="maxSize" value="100" />
<property name="title" value="A Basic Bean" />
<property name="file" value="config.xml" />
</bean>
②注入引用类型
如果需要注入的属性不是基本类型,而是引用类型,则使用<ref>替代<value>
package example.chapter;
public class RefBean {
private BasicBean basicBean;
public void setBasic(BasicBean basicBean) {
this.basicBean = basicBean;
}
}对应XML配置片段如下
<bean id="refBean" class="example.chapter3.RefBean">
<property name="basic" ref="basicBean" />
</bean>
③注入List类型和数组类型
Spring支持各种集合类型的注入
package example.chapter;
import java.util.List;
public class ListBean {
public void setChildren(List children) {}
public void setPrices(List<Float> prices) {
for(Float f : prices) {
System.out.println(f);
}
}
public void setFibonacci(int[] fibonacci) {
for(int n : fibonacci) {
System.out.println(n);
}
}
}对应XML配置片段如下
<bean id="listBean" class="example.chapter3.ListBean">
<!-- 注入普通List -->
<property name="children">
<list>
<value>A String</value>
<ref bean="basicBean" />
</list>
</property>
<!-- 注入强类型的List<Float> -->
<property name="prices">
<list>
<value>12.54</value>
<value>82</value>
<value>27.9</value>
</list>
</property>
<!-- 注入int[]数组 -->
<property name="fibonacci">
<list>
<value>1</value>
<value>1</value>
<value>2</value>
<value>3</value>
<value>5</value>
</list>
</property>
</bean>
④set类型注入
Set类型和List类似,只不过注入的是Set,因此包含任意的<value>或<ref>节点
package example.chapter;
import java.util.Set;
public class SetBean {
public void setCups(Set cups) {
for(Object obj : cups) {
System.out.println(obj);
}
}
}
对应的XML配置片段如下
<bean id="setBean" class="example.chapter3.SetBean">
<property name="cups">
<set>
<value>spring</value>
<value>hibernate</value>
<value>hibernate</value>
<ref bean="listBean" />
</set>
</property>
</bean>
⑤注入Map类型
Map存在于健值映射,通过<entry>节点来定义各项
package example.chapter;
import java.util.*;
public class MapBean {
public void setWeekday(Map map) {}
}对应XML配置如下:
<bean id="mapBean" class="example.chapter3.MapBean">
<property name="weekday">
<map>
<!-- 用String作为key -->
<entry key="Monday">
<value>do something</value>
</entry>
<entry key="Tuesday">
<ref bean="setBean" />
</entry>
<!-- 用Bean作为key -->
<entry key-ref="basicBean" value="basic" />
<entry key-ref="listBean" value-ref="setBean" />
</map>
</property>
</bean>
上面配置上,注入的Map键只能为String类型,但实际上,Map可以做为任意的Object做为键。为了使用另一个Bean作为键,需要近如下编写<entry>节点。
<entry>
<key>
<ref bean="basicBean"/>
</key>
<value>basic</value>
</entry>
<entry>
<key>
<ref bean="listBean"/>
</key>
<ref>setBean</ref>
</entry>
⑥注入Properties类型
Properties也是键值对构成,注入和Map类似,不过,由于Properties的键值都只能由String,因此不必使用<value>,注入Properties的XML配置片段如下。
<bean id="propBean" class="example.chapter3.PropBean">
<property name="env">
<props>
<prop key="target">1.5</prop>
<prop key="encoding">UTF-8</prop>
<prop key="debug">on</prop>
</props>
</property>
</bean>
㈡ 构造方法注入
除了上述属性注入外,还有构造方法注入.
使用构构造方法注入的优点是,构造方法的参数是强制注入的,这样可以保证Bean在创建时就正确初始化了。属性可能由于多次注入而导致不正确的状态。
package example.chapter;
public class ConstructorBean {
public ConstructorBean(int min, int max) {
System.out.println("(int, int)");
}
}
在XML配置文件中,需要在<bean>和</bean>之间加入<constructor-arg>节点,按照构造方法的参数排序。
<bean id="constructorBean" class="example.chapter3.ConstructorBean">
<constructor-arg value="100" />
<constructor-arg value="200" />
</bean>
分享到:
- 2008-11-13 12:11
- 浏览 1279
- 评论(0)
- 论坛回复 / 浏览 (0 / 1508)
- 查看更多
相关推荐
1、<bean>标签主要用来进行Bean定义; 2、alias用于定义Bean别名的; 3、import用于导入其他配置文件的Bean定义,这是为了加载多个配置文件,当然也可以把这些配置文件构造为一个数组(new String[] {“config1.xml...
spring Ioc容器配置 IOC容器数据源配置 <!-- 配置数据源 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <value>org.gjt.mm.mysql.Driver ...
1.spring中bean实例化的俩种方式 2.spring中bean的各种元素如何使用 3.spring中的bean管理 4.spring中不同类型bean的作用域 ...通过我的项目,可以跟着学习SPringIoC容器和Bean管理,帮助你快速上手SSM框架
Java-Spring-SpringIoC容器-SpringIoC的学习 SpringIoC容器的学习笔记 主要介绍了IoC容器工作原理以及如何配置IoC容器 通过<bean>标签和注解配置容器
Spring IOC容器可以管理Bean的生命周期,允许在Bean生命周期的特定点执行定制的任务。 Spring IOC容器对Bean的生命周期进行管理的过程如下: 通过构造器或工厂方法创建Bean实例 为Bean的属性设置值和对其它Bean的...
主要介绍了Spring为IOC容器注入Bean的五种方式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
spring容易对于bean的配置,以及spring ioc技术的实现的讲解!
主要介绍了spring在IoC容器中装配Bean详解,具有一定借鉴价值,需要的朋友可以参考下
SSH笔记-IOC容器中 Bean 的生命周期,通过实现BeanPostProcessor接口,来定义初始化方法和销毁方法时的逻辑
使用spring的Ioc容器组装各种组件总结
spring 3.X 企业应用 第四章 在Ioc容器中装配Bean 手机拍的图片,略有缺页
spring-context:上下文,即IOC容器 spring-context-support:对IOC的扩展,以及IOC子容器 spring-context-indexer:类管理组件和Classpath扫描 spring-expression:表达式语句 切面编程: spring-aop:面向切面编程,...
本文深入探讨了Spring框架中IoC容器的源码机制,涵盖了容器的初始化、Bean工厂的实例化、Bean定义的读取及Spring Bean的生命周期管理。通过精细的分析,本文揭示了AnnotationConfigApplicationContext的实例化过程,...
本文深入探讨了Spring IoC容器的加载过程及其源码实现,揭示了Spring中最为根本的概念之一。这包括从AnnotationConfigApplicationContext的实例化开始,到DefaultListableBeanFactory工厂的建立,再到...
《Spring技术内幕》学习笔记3——IoC容器载入Bean定义资源文件 《Spring技术内幕》学习笔记4——IoC容器解析Bean定义资源并注册解析后的Bean 《Spring技术内幕》学习笔记5——IoC容器的依赖注入 《Spring技术内幕...
2、本工程,模拟实现Spring的IOC,将xml中配置的Bean读入到Spring容器中,并在测试用例中调用Spring容器中的bean。 3、开发环境eclipse,jdk1.6。使用第三方jar包有:jdom.jar(用于解析xml文件),junit-4.4.jar...
在 spring 的 ioc 容器,在默认是按照单例创建的,即配置一个 bean 对象后,ioc 容器只会创建一个 bean 实例。 如果,我们希望 ioc 容器配置的某个 bean 对象,是以多个实例形式创建的则可以通过配置scope=...
Spring2[1].5_IoC(控制反转)容器之容器与Bean(附示例),Spring2.0结合java bean的简单应用.
背景在 Spring 项目中,你可能需要从 properties 文件中读入配置注入到 bean 中,例如数据库连接信息,redis server的地址端口信息
本文通过实例代码给大家详解了springboot获取ioc容器中注入的bean问题,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧