Spring框架之Bean

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完毕,喝杯茶歇歇。

posted @ 2018-12-07 16:17  MIAOHY  阅读(222)  评论(0编辑  收藏  举报