二、Bean的配置、作用范围、生命周期

一、Bean基本配置
-
<!-- 这里的id是bean的唯一标识,会转化成beanName,name 是给bean配置别名,getBean可以通过别名获取 --> <bean id = "userDao" name = "dao" class = "xxx.UserDaoImpl"></bean> -
// getBean 实际上是根据beanName获取的 UserDaoImpl userDao = (UserDaoImpl) applicationContext.getBean("userDao"); -
如果不配id的话,也会有默认的beanName,默认是当前类的全限定类名:
-
通过别名获取的时候,会存放在别名的map中:
-

-
如果bean没配置id,但是配置别名,默认第一个别名是beanName
-
-
bean配置初始化方法:
-
<bean id = "userDao" class = "xxx.UserDaoImpl" init-method="init"></bean> -
public class UserDaoImpl implements UserDao { public void init() { } } -
扩展:实现InitializingBean接口,afterPropertiesSet
-
-
实例化配置:
-
构造方法方式:默认是无参构造
-
<bean id = "userDao" class = "xxx.UserDaoImpl"> <!-- 通过 constructor-arg 标签传参数 --> <!-- value 是一般数据类型 --> <constructor-arg name="name" value="张三"></constructor-arg> <!-- ref 是引用数据类型,表示引用userService这个实例 --> <constructor-arg name="userService" ref="userService"></constructor-arg> </bean> <bean id="userService" class="xxx.UserServiceImpl"></bean> -
public class UserDaoImpl implements UserDao { public UserDaoImpl(String name, UserService userService) {} }
-
-
工厂方式:
-
静态工厂方式实例化Bean:
-
public class StaticFactoryBean { public static UserDao createUserDao(){ // 可以进行逻辑代码编写 return new UserDaoImpl(); } } -
<!-- factory-method 表示将StaticFactoryBean中的createUserDao方法的返回值new UserDaoImpl存到容器中 --> <bean id="userDao" class="xxx.StaticFactoryBean" factory-method="createUserDao" /> -
有参数的情况:同上,通过
constructor-arg配置
-
-
实例工厂方式实例化Bean:
-
public class DynamicFactoryBean { public UserDao createUserDao(){ // 可以进行逻辑代码编写 return new UserDaoImpl(); } } -
<!-- 将DynamicFactoryBean存入容器 --> <bean id="dynamicFactoryBean" class="xxx.DynamicFactoryBean"/> <!-- factory-bean:工厂对象 factory-method:工厂对象中的方法 --> <bean id="userDao" factory-bean="dynamicFactoryBean" factory-method="createUserDao"/> -
有参数的情况:同上,通过
constructor-arg配置
-
-
实现BeanFactory规范延迟实例化Bean:
-
public class MyBeanFactory implements FactoryBean<DUserDao> { @Override public DUserDao getObject() throws Exception { return new DUserDaoImpl(); } @Override public Class<?> getObjectType() { return DUserDao.class; } } -
<!-- 配置FactoryBean --> <bean id="dUserDao1" class="xxx.DUserDaoImpl"></bean> -
调用getBean方法才实例化
-
-
-
二、Bean作用范围
- 默认作用范围有两个,分别是Singleton和Prototype
- Singleton:默认,单例,容器创建时会实例化bean,并存到单例池,每次getBean从池中获取。
- Prototype:原型,容器初始化不会创建Bean,调用getBean方法才会创建,并且每调一次getBean都生成新的实例
本文详细介绍了Spring框架中Bean的基本配置方法,包括Bean的作用范围、生命周期及其配置方式等内容。重点讲解了如何通过不同方式实例化Bean,如构造方法、工厂方式等。

286

被折叠的 条评论
为什么被折叠?



