ioc容器
对于容器而言需要满足两个方面:
1、全局唯一
2、无论何地都可以进行对容器的访问
对于Spring而言,BeanFactory则就是这样的容器,只不过它过于底层。在我们的日常开发中还是使用ApplicationContex.
不过ApplicationContex跟BeanFactory有一个显著的区别:ApplicationContex在容器初始化的时候实例化所有的single bean,而BeanFactory则是在第一次使用的时候才会初始化相应的Bean.
一、ApplicationContext的初始化:
1、如果配置文件是在类路径下,可以使用new ClasspathXmlApplicationContext("相对于类路径下的文件名");
2、如果配置文件时再文件系统下,则可以使用new FileSystemXmlApplicationContext("文件系统下的文件名");
文件系统下的文件名 举例:"beans.xml"这表示相对于用户当前的目录——工程所在的根目录,
"file:d:/beans.xml"表示d盘目录下的beans.xml
3、当然如果觉得xml配置比较麻烦,还可以使用类来充当配置文件,代码如下。当然在使用类进行配置的话,那么得需要AnnotationConfigApplicationContext来初始化容器
@Configuration
public class BeanConf { @Bean(name="car")
public Car createCar(){
Car car = new Car();
car.setId(1l);
car.setName("法拉利");
car.setPrice(5000000);
return car;
}
}
4、可以xml和类进行搭配的方式来定义bean的装配。
对于bean的配置,不仅可以通过在xml中进行配置或在上面第三条使用方法的配置,还可以直接在bean类的定义中直接配置(从而达到定义和配置在一起,相亲相爱不分离)
通过以下几个注解的方式就可以对一个bean进行定义
@Repository ——dao实现类 @Service——Service实现类 @Controller——控制器
当然在经过上面的注解配置后,需要在xml配置文件中或基于java类的配置中给spring 一个指示,spring根据这个指示会扫描某个包下的类看他是否含有上面的注解,如果有的话,则吧bean交给spring来进行控制(类过多的话,spring不可能扫描所有的类,基于这样的考虑性能是一方面吧)
xml: 需要制定context命名空间
xmlns:context="http://www.springframework.org/schema/context"
schemaLocation中添加"
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
"
<context:compent-scan base-package="..."/>
当然如果还想在精确点控制的话,可以使用context:compent-scan的子元素context:exclude-filter(排除在外的目标类),context:include-filter(包含在内的目标类)
java类:。。。
二、bean的作用域
bean的作用域影响这bean的生命周期。
- singleton 单例bean,如果配置的bean没有显示指定scope则默认是singleton
- prototype 每次调用getBean时都会重新new 一个实例
- request 适用于web应用程序,每次请求都会重新new 一个实例
- session 适用于web应用程序,同一个http session都获取的是同一个对象
- globalSession 适用于web应用程序(暂时不知道为什么会定义这么个作用域)
最新文章
- ubuntu更新源(Package has no installation candidate 的问题)
- range和xrange梳理
- Android composite adb interface
- CSS3 Transform Matrix
- 移动设备和SharePoint 2013 - 第5部分:自定义应用
- 已知ip地址和其子网掩码如何求网络号子网号主机号
- Windows装机指南
- development period
- 通过Web Deploy方式部署WCF
- 基于Win7 Python2.7的Numpy安装包分享
- @dynamic、@synthesize
- 日常API之百度翻译
- BZOJ 4819 新生舞会
- Keeweb-Linux的密码管理器
- 关于GCJ02和WGS84坐标系的一点实验
- Java数组排序基础算法,二维数组,排序时间计算,随机数产生
- ElasticSearch入门点滴
- Hive快捷查询:不启用Mapreduce job启用Fetch task三种方式介绍
- Java高并发秒杀API之Service层
- hdu-6333-莫队
热门文章
- MongoDB实战指南(二):索引与查询优化
- Win2003部署Framework 4.5框架的MVC4项目
- 让动画不再僵硬:Facebook Rebound Android动画库介绍
- 学习笔记-[Maven实战]-第二章:Maven安装和配置
- WCF - Consuming WCF Service
- BZOJ_2179_FFT快速傅立叶_(FFT)
- BZOJ_1607_ [Usaco2008_Dec]_Patting_Heads_轻拍牛头_(筛数)
- An error occurred while filtering resources
- ASP.NET MVC 開發心得分享 (21):Routing 觀念與技巧
- nginx+ffmpeg搭建rtmp转播rtsp流的flash服务器