Bean:憨豆先生
一、Bean是个啥
Bean,第一次看到它时,我一下就认出来了,憨豆先生!Mr. Bean,然鹅并不是这个意思,我之前遇到许多人,包括我自己总是有一个想法,一定要把某个单词翻译成中文才取理解它到底代表什么意思,最近我才发现,何必呢?莫非你以为翻译成中文你就能理解了?举个栗子:在线性代数中有个概念叫做“Rank”翻译过来就是“秩”,然鹅翻译成中文后对你的理解有任何帮助吗?秩!反倒是rank好些,最起码知道它有排序的意思。
废话不多说,那么bean到底是什么呢?我在一本书看到的一段话我觉得特别好
二、Bean属性
1.id和name
<bean id = "" ></bean>
id : 作为这个bean的唯一标识符,能使用特殊字符,字母开头,同一配置文件中不能重复
<bean name = "" ></bean>
name : 可以使用特殊字符,同一个bean可以有多个name
例如 name = ”bean1,bean2,bean3...“,
两者共同点:
i. 同一配置文件中都不可以重复,不同配置文件中可以重复,但如果有重名会覆盖
ii.都起到标识bean的作用
iii. 如果id和name都没有,默认使用当前类的全类名作为标识,可以使用全类名调用,如下
User u = (User)ac.getBean("com.test.entity.User");
2. scope属性
属性名 | 范围 |
---|---|
singleton | 默认,单例。在整个容器里面bean只生成一个实例 |
prototype | 多例的。每次getBean()都会产生一个新的实例 |
request | Spring创建bean对象存到request域中,一次http请求中,bean只有一个实例 |
session | Spring创建bean对象存到session域中 |
global Session | 应仅在使用portlet context的时候有效.如果没有 Porlet 环境那么 globalSession 相当 于 session. |
3. 生命周期
init-method 初始化的时候执行的方法,
destroy-method 销毁的时候执行的方法。
注:销毁方法想要成功调用需要在单例范围中。
三、三种创建Bean方式
i.无参构造函数
<bean id="user" class="com.itheima.entity.User"></bean>
最常用的方式
要求该Bean类提供无参数的构造器。
会对Bean实例的所有属性进行初始化
ii.静态工厂
//这是一个user工厂
public class UserFactory{
public static User produce(){
return new User();
}
}
--------------------------------------------
//这是配置文件
<bean id = "user" class = "com.test.demo.UserFactory" factory-method = "produce"> </bean>
class属性也必须指定为静态工厂类
使用factory-method属性来指定静态工厂方法
iii.实例工厂
//这还是一个工厂类
public class UserFactory{
public User produce(){
return new User();
}
}
//下面还是一个xml配置文件
---------------------------------------
<bean id="userFactory" class="com.test.demo.UserFactory"></bean>
<bean id="user2" factory-bean="userFactory" factory-method="produce"></bean
实例工厂方法与静态工厂方法只有一个不同:
静态工厂方法只需工厂类即可,而实例工厂方法需要工厂类的实例。
factory-bean: 该属性的值为工厂Bean的id。
factory-method: 该属性指定实例工厂的工厂方法。
Bean完毕,喝杯茶歇歇。