bean的作用域:前提都在同一个IOC(bean)容器中: scope =
singleton: 单例模式 一个bean容器中只有一个实例,bean容器指
ApplicationContext context =
new ClassPathXmlApplicationContext(new String[] {"spring-config.xml"});
Employee employee1=context.getBean("employee1", Employee.class);
context这是一个bean容器,如果在创建一个context1, 同时用
context1.getBean("employee1",Employee.class)
表示2个容器中都有一份相同的实例。
prototype 每次创建新的对象new的时候,都创建新实例, 之后自动回收,
与web应用有关
request 一次http请求创建一个实例,另一个http请求有新实例
session 一次http请求创建一个实例,另一个http请求有新实例
global session 在一个web系统中相当于session, 如果有多个系统混用,则基于portlet, 而每个系统都应该有自己的session, 所以此时用global session.
注意 juint测试中,每个方法都会执行@before,@after所以不同的方法会在不同的IOC容器中
通过工厂方法创建一个bean实例
工厂bean, calendar=Calendar.getInstance方法
采用id或者name属性标识一个bean。Destroy Method 类在销毁前能执行的方法。 在bean的定义中配置destroy-method属性< bean
id=“excutorService” class=“java.util.concurrent.Executors”
factory-method=“newCachedThreadPool” destroy-method=“shutdown”>
Bean的生命周期
- 定义 :在配置文件中定义id和class
- 初始化:
ApplicationContext context =
new ClassPathXmlApplicationContext(new String[] {"spring-config.xml"});
Product product1 = context.getBean("product", Product.class);
- 使用:调用实例的方法
- 销毁:容器停止后,销毁该容器创建的所有实例。
初始化和销毁bean的方法有三种
- 类继承接口
- 在配置文件中用默认bean
- 在配置文件中定义init-method和destory-method属性。
Aware
比如:ApplicationContextAware 提供context上下文
BeanNameAware
以及ServletConfigAware和ServletContextAware
spring中提供了一些以Aware结尾的接口,实现了Aware接口的bean在被初始化之后,可以获取相应资源通过Aware接口,可以对Spring相应资源进行操作(一定要慎重)为对Spring进行简单的扩展提供了方便的入口
bean的自动装配
default-autowire=”byName |byType|constructor”
例子
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"
default-autowire="byName"
>
用constructor时要在调用方中写构造函数,有被调用方的参数,那么配置文件中被调用方的id可以省略,只用到class。
Resources
ResourceLoader