Bean配置
如果把Spring看做一个大型工厂,则Spring容器中的Bean就是该工厂的产品。
要想使用这个工厂生产和管理Bean,就需要在配置文件中告诉它需要哪些Bean,以及需要使用何种方式将这些Bean装配到一起
Bean的本质就是Java中的类,而Spring中的Bean其实就是对实体类的引用,来生产Java类对象,从而实现生产和管理Bean
Bean的配置方式是通过XML文件来注册并管理Bean之间的依赖关系
Bean属性
id Bean的唯一标识,Spring容器对Bean的配置,管理都通过该属性
name Spring容器同样可以通过该属性对容器中的bean进行配置,管理,name属性可以为bean指定多个名称,每个名称之间使用逗号或者分号隔开
class 该属性指定Bean实现的具体类,它必须是一个全称
scope bean实例的作用域
Bean作用域
singleton是Spring容器默认的作用域,当Bean的作用域为singleton时,Spring容器就只会存在一个共享的Bean实例
,无论多少Bean引用它,始终指定同一个对象
prototype 每次通过Spring容器获取的prototype定义的bean时,容器都将创建一个新的Bean实例.
Bean生命周期
Bean装配方式
Bean的装配可以理解为依赖关系注入,Bean的装配方式即Bean依赖注入的方式。Spring容器支持多种形式的Bean的装配方式,如基于XML的装配、基于注解(Annotation)的装配和自动装配(其中最常用的是基于注解的装配)
基于xml的配置:
setter注入 条件:Bean类必须有一个无参构造方法 Bean类必须为属性提供setter方法
在配置文件中,使用<property>元素来为每个属性注入值
构造函数注入 条件:Bean类必须提供有参构造方法
配置文件中,使用<constructor-arg>元素来为参数注入值
自动装配:
所谓自动装配,就是将一个Bean自动的注入到到其他Bean的Property中。
Spring的<bean>元素中包含一个autowire属性,我们可以通过设置autowire的属性值来自动装配Bean,autowire属性有5个值
构造注入:
public class User {
private String username;
private Integer password;
private List<String> list;
/**
* 1.使用构造注入
* 1.1提供带所有参数的有参构造方法。
*/
public User(String username, Integer password, List<String> list) {
super();
this.username = username;
this.password = password;
this.list = list;
}
/**
* 2.使用设值注入
* 2.1提供默认空参构造方法 ;
* 2.2为所有属性提供setter方法。
*/
public User() {
super();
}
public void setUsername(String username) {
this.username = username;
}
public void setPassword(Integer password) {
this.password = password;
}
public void setList(List<String> list) {
this.list = list;
}
@Override
public String toString() {
return "User [username=" + username + ", password=" + password +
", list=" + list + "]";
}
}
<!--1.使用构造注入方式装配User实例 -->
<bean id="user1" class="com.itheima.assemble.User">
<constructor-arg index="0" value="tom" />
<constructor-arg index="1" value="123456" />
<constructor-arg index="2">
<list>
<value>"constructorvalue1"</value>
<value>"constructorvalue2"</value>
</list>
</constructor-arg>
</bean>
<!--2.使用设值注入方式装配User实例 -->
<bean id="user2" class="com.itheima.assemble.User">
<property name="username" value="张三"></property>
<property name="password" value="654321"></property>
<!-- 注入list集合 -->
<property name="list">
<list>
<value>"setlistvalue1"</value>
<value>"setlistvalue2"</value>
</list>
</property>
</bean>
自动装配:
<!-- 使用bean元素的autowire属性完成自动装配 -->
<bean id="userDao"
class="com.itheima.annotation.UserDaoImpl" />
<bean id="userService"
class="com.itheima.annotation.UserServiceImpl" autowire="byName" />
<bean id="userController"
class="com.itheima.annotation.UserController" autowire="byName"/>