如果把Spring看做一个大型工厂,则Spring容器中的Bean就是该工厂的产品。要想使用这个工厂生产和管理Bean,就需要在配置文件中告诉它需要哪些Bean,以及需要使用何种方式将这些Bean装配到一起。
Bean:Bean的本质就是Java中的类,而Spring中的Bean其实就是对实体类的引用,来生产Java类对象,从而实现生产和管理Bean ;
Bean的配置:
Spring容器最常用的配置文件是:XML文件和Properties.通过这样注册并管理Bean之间的依赖关系;(一般都用XML文件配置)
Bean实例化的三种方式:构造器实例化、静态工厂实例化、实例工厂实例化
1.构造器实例化:
每个类系统都会默认定义一个构造函数,直接通过XML文件即可在Spring中配置,作为工厂生产该类的对象;
2.静态工厂实例化:
如下图:类MyBean2Factory 静态方法生产类Bean2对象
XML文件中配置信息如下:需要指明工厂的生产方法
<bean id="bean2" class="com.itheima.instance.static_factory.MyBean2Factory" factory-method="createBean" />
3.动态工厂实例化:
1.如下图:类MyBean3Factory 通过createBean方法生产类Bean3对象
public class MyBean3Factory {
public Bean3 createBean(){
return new Bean3();
}
}
2.注册工厂
3.使用工厂实例化对象
<bean id="myBean3Factory" class="com.itheima.instance.factory.MyBean3Factory" />
<bean id="bean3" factory-bean="myBean3Factory" factory-method="createBean" />
Bean的装配方式:Bean的装配可以理解为依赖关系注入,Bean的装配方式即Bean依赖注入的方式。
Spring容器支持多种形式的Bean的装配方式 ;如基于XML的装配、基于注释的装配和自动装配
1.基于XML的装配:
1.1设值注入:
1.Bean类必须有一个无参构造方法
2.Bean类必须为属性提供setter方法()
注意:list-value 是set方法
1.2构造注入:
1.Bean类必须提供有参构造方法
例如:Bean类中两个字符串变量 一个字符串数组变量
2.基于注解(Annotation)的装配
注释如下:
方法一:
在类中注入另一个Bean
如下是application.xml的配置
<context:annotation-config />
<bean id="userDao" class="com.itheima.annotation.UserDaoImpl" />
<bean id="userService" class="com.itheima.annotation.UserServiceImpl" />
<bean id="userController" class="com.itheima.annotation.UserController"
方法二:扫描包来进行配置
注意:不管是上面哪种方法通过添加context注释来配置XML文件时,添加一个xmls:context 和xsi:schemaLocation 即可;
3.自动装配
1.自动装配对注入的Bean需要setter方法实例化:
UserServiceImple和UserController,分别增加类属性的setter方法;
2.修改Spring配置文件,使用autowire属性配置Bean;
<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" />