XML配置方式配置Bean
Bean标签
- id:标识符,定位对象的。id不能重复,没有mybatis中namespace之说了
- class :所创建对象的全限定类名,类似于:com.spring.dao.AccountDaoImpl,不能配置为接口,因为接口不能实例化
- scope :对象的作用范围,单例和多例,单例:内存中这个类只有这一个对象,创建之后一直使用这一个;多例:当你getBean的时候,每getBean一次都给你创建一个新的对象
- singleton:单例/单个的意思,默认bean的scope都是单例
- prototype:多例的意思,每getBean一次就new一个新的对象返回
- request:在web应用的一个request请求内有效,下个请求内就重新new一个对象
- session:在web应用的一个session会话内有效,下个会话重新new一个对象
对象创建的三种方式
-
通过配置class全限定类名框架底层使用反射技术来创建对象(经常使用,推荐)
-
静态方法自己new对象,然后加入到Spring的对象容器中管理
package com.spring.factory;
import com.spring.service.AccountService;
import com.spring.service.AccountServiceImpl;
public class StaticFactory {
public static AccountService createAccountService() {
return new AccountServiceImpl();
}
}
- 动态实例化方法(自己new对象,然后加入到Spring的对象容器中管理)(需要首先定义工厂的bean,然后通过工厂bean对象调用里面的方法返回具体对象)
package com.spring.factory;
import com.spring.service.AccountService;
import com.spring.service.AccountServiceImpl;
public class InstanceFactory {
public AccountService createAccountService() {
return new AccountServiceImpl();
}
}
ApplicationContext和BeanFactory
ApplicationContext在启动SpringIOC容器的时候,会立即创建对象放入map中(不存在影响性能的问题)
BeanFactory在启动SpringIOC容器的时候,不会立即创建对象,getBean使用对象的时候,Spring才去创建对象(类似于懒加载)