Spring 框架基于控制反转和依赖注入得以实现的自动装配 Bean 对象的功能,关于装配 Bean 对象,掌握下图这 4 个内容就可以了。
_装配Spring+Bean 1.png依赖注入的三种方式
对象交给 Spring 进行创建了,但是属性如何初始化呢?Spring 初始化 Bean 对象属性有三种方式如下图:
_依赖注入的三种方式.png构造器注入
使用方式要满足两点:
- 在 Bean 类中提供对应的构造函数
public Car(String name, Double price) {
this.name = name;
this.price = price;
}
- 在 XML 文件中进行构造方法属性的配置
<!-- 属性注入的方式:构造函数注入,(其他类型对象也是可以的哦) -->
<bean id="car" class="com.itheima.spring.demo4.Car">
<constructor-arg name="name" value="BMW"/>
<constructor-arg name="price" value="2383890"/>
</bean>
使用 setter 注入
使用方式要满足两点:
- 在 Bean 类中提供属性和对应的 setter 方法
private String name;
public void setName(String name) {
this.name = name;
}
- 在 XML 文件中提供属性的配置
<bean id="userDao" class="com.itheima.spring.demo1.UserDAOImpl">
<property name="name" value="keqi"></property>
</bean>
这种方式灵活性更高,通常都是使用这种方式!
接口注入
通常都是用这种方式从外界系统中获得资源,Spring 中用的不多。比如 JavaWeb 中的request
和response
内置对象,就是通过接口注入的方式得到的。
XML 装配 Bean 的方式
_XML装配Bean.pngBean 类的配置
<bean id="userDao" class="packageName.UserDAOImpl">
</bean>
普通属性的配置
基本数据类型和 String 类型的字符串都是这样配置的
<bean id="userDao" class="packageName.UserDAOImpl">
<property name="name" value="keqi"/>
</bean>
其他类型的对象
其他类型的对象要用ref
属性指定,值就是其他 Bean 对象的id
属性。
<bean id="employee" class="packageName.Employee">
<property name="name" value="keqi"/>
<!-- 引用其他对象,用ref引用就可以了哦 -->
<property name="car2" ref="car2"/>
</bean>
集合属性的配置
如果某个属性是集合类型的,只要在property
属性下加上对应集合类型的标签即可。
- List 集合&数组集合
<property name="list">
<list>
<value>aaa</value>
<value>bbb</value>
<value>ccc</value>
</list>
</property>
- Map 集合
<property name="map">
<map>
<entry key="aaa" value="111"/>
<entry key="bbb" value="222"/>
<entry key="ccc" value="333"/>
</map>
</property>
- Set 集合
<property name="set">
<set>
<value>aaa</value>
<value>bbb</value>
<value>ccc</value>
</set>
</property>
Bean生命周期&作用范围的配置
指定生命周期的方法和类对象的作用范围如下
<bean id="customerDAO" class="packageName.CustomerDAOImpl"
init-method="setup" destroy-method="destroy"
scope="prototype">
</bean>
注解配置 Bean 的方式
Spring 开发中通常都是用的注解来配置 Bean 类的,这种方式开发更快捷。
_注解配置Bean.png
Bean 类的注解
表示一个类交给 Spring 进行管理用的是@Component
注解。但是通常用的是它衍生初的另外三个注解,这样看到注解就能够知道这个类在三层架构中处于什么位置。
-
@Controller
,表示 web 层的类 -
@Service
,表示 service 层的类 -
@Repository
,表示 dao 层的类
Bean 属性的注解
Bean 类的属性分为普通属性和对象类型的属性。记住下面两个注解就可以了:
-
@Value
,表示普通属性的注解 -
@Resource
,表示对象类型的注解
Bean 生命周期的注解
因为 Bean 对象是由 Spring 进行管理的,所以它和 Servlet 类一样,也有所谓的生命周期方法。
一个是初始化方法,Bean 对象创建后立即执行此方法,另一个是销毁方法,Bean 对象销毁之前会执行此方法。分别使用以下两个注解来描述对应的方法:
-
@PostCOnstruct
,描述初始化方法 -
@PreDestroy
,描述销毁方法
Bean 作用范围的注解
Bean 对象是有作用范围概念的,在 WEB 应用中,Bean 对象可以作为request
或者session
内置对象的属性存在。同时还需要指定它创建的方式,是保证单例创建,还是多例创建。用@Scope
属性来描述类,他有以下 4 个属性:
-
singleton
,表示单例创建该对象 -
prototype
,表示多例创建该对象 -
request
,表示该类作为属性存放在此对象中,每次请求一个对象 -
session
,表示该类作为属性存放在此对象中,一次会话一个对象
XML&注解混合配置Bean
注解开发快速,后期不好维护,XML 后期好维护,开发繁琐。所以通常也会结合他们的优点,两者混合使用来配置 Bean 。原则就是,类用 XML 描述,属性用注解描述。
网友评论