Bean
Bean
一、Bean 是啥
Spring 官方文档对 Bean 的解释:
In Spring, the objects that form the backbone of your application and that are managed by the Spring IoC container are called beans. A bean is an object that is instantiated, assembled, and otherwise managed by a Spring IoC container.
翻译过来
在 Spring 中,构成应用程序主干并由Spring IoC容器管理的对象称为bean。bean是一个由Spring IoC容器实例化、组装和管理的对象。
简单概述:
- bean 是对象,可以有一个或多个。
- bean 由 Spring 中一个叫 IOC 的东西管理。
- 我们的程序由一个个 bean 组成。
二、Bean 分为两类
2.1、注册 Bean
把你要实例化的对象转换成一个 Bean,放在 IOC 容器中。
注解 注册:
@Component@Repository@Controller@Service@Configuration- ....
XML 注册:
<bean id="beanId" class="com.xxx"/>
注意:
- 必须确保
beanId是全局唯一不然会报错。 - 可以不设置
beanId,但调用的时候就需要使用 类的全限定名。
2.2、使用 Bean
即是把已经在 配置类 或者 xml 文件中配置好的 Bean 拿来使用,完成属性、方法的组装。详细
- 通过
byType(@Autowired) 获取 IOC 容器中的 Bean。 - 通过
byName(@Resource)获取 IOC 容器中的 Bean。
三、Bean 作用域
-
单例模式(Spring 默认机制)
<bean id="..." class="..." scope="singleton"/> -
原型模式:每次从容器中 get 的时候,都会产生一个新对象!
<bean id="..." class="..." scope="prototype"/> -
Web 使用的作用域
-
request:在一次请求中创建,创建完失效<bean id="..." class="..." scope="request"/> -
session:一直在 session 中活着<bean id="..." class="..." scope="session"/> -
application:在 全局中活着
-
四、Bean 的自动装配
自动装配就是指 Spring 容器可以自动装配(autowire)相互协作的 Bean 之间的关联关系。
简化就是:将一个 Bean 注入其它 Bean 的 Property 中。
在 Spring 中有三种装配的方式
- 在 xml 中显示的配置
- 在 java 中显示配置
- 隐式 的自动装配 bean
- 在 XML 文件中使用
autowire属性即可。
- 在 XML 文件中使用
4.1、XML 配置文件装配
实体类
public class People{
private Cat cat;
public People(){}
public People(Cat cat){
this.cat = cat;
}
public void setCat(Cat cat){
this.cat = cat;
}
public Cat getCat(){
return cat;
}
@Override
public String toString(){
return "People{cat="+
cat +
'}';
}
}
1、byName自动装配
byName:会自动在容器上下文中,查找和 注入类中的set()名相同的beanId并注入。
<bean id="cat" class="com.pojo.Cat"/>
<bean id="people" class="com.pojo.People" autowire="byName"/>
- 注意:
- 被注入类的
beanId可以随便起,但必须和 注入类中的set()名相同。
- 被注入类的
2、byType 自动装配
byType:会自动在容器上下文中,查找和 注入类中的set()参数类型相同的 bean 并注入。
<bean class="com.pojo.Cat"/>
<bean id="people" class="com.pojo.People" autowire="byType"/>
- 注意:
- 必须保证 Spring 容器中类的 全限定名 唯一。
- 包名不一样、类名一样的话,
set()参数类型是哪个就注入那个。
3、constructor 自动装配
constructor:会自动在容器上下文中,查找和 注入类中 有参构造器 参数类型 和 参数个数 相同的 bean 并注入。
<bean class="com.pojo.Cat"/>
<bean id="people" class="com.pojo.People" autowire="constructor"/>
- 注意:
- 被注入属性的 类型 和 个数必须 注入类中的 有参构造器 参数相同。
4.2、半注解实现自动装配
1. @Resource
- 实体类
public class People {
@Resource
private Cat cat;
@Override
public String toString(){
return "People{" +
"cat=" + cat +
'}';
}
}
- xml 配置文件
<bean id="cat" class="com.pojo.Cat"/>
<bean id="people" class="com.pojo.People"/>
2. @Autowired
- 实体类
public class People {
@Resource
private Cat cat;
@Override
public String toString(){
return "People{" +
"cat=" + cat +
'}';
}
}
- xml 配置文件
<bean class="com.pojo.Cat"/>
<bean id="people" class="com.pojo.People"/>
- 同一个类在 Spring 容器中注册两次
- 一个有
beanId一个没有beanId,自动装配会报错。 - 如果其中有一个
beanId和 绑定注解的属性名 一样就可以。
- 一个有

浙公网安备 33010602011771号