使用Spring容器
- maven配置;
- 创建Bean配置文件并定义好所需对象;
- 创建Spring容器并制定需要装载的Bean配置文件;
- 通过容器提供的方法获取容器中的对象来使用。
Bean
什么是Bean??
Bean是一套约定或规范。具体的说Bean:
1、所有属性为private
2、提供默认构造方法
3、提供getter和setter
4、实现serializable接口
简单的说:由spring容器管理的对象都是Bean对象,也是普通的java对象。
码两篇文章【javaBean上】、【javaBean下】
Bean、EJB、POJO及区别
- 在java1996年发布,当年12月即发布了java bean1.00-A,有什么用呢?通过统一的规范可以设置对象的值(get,set方法),这是最初的java bean;
- 在实际企业开发中,需要实现事务、安全、分布式,javabean就不好用了.sun公司就开始往上面堆功能,这里java bean就复杂为EJB;
- EJB功能强大,但是太重了.此时出现DI(依赖注入),AOP(面向切面)技术,通过简单的java bean也能完成EJB的事情,这里的java bean简化为POJO;
- Spring诞生了.
区别:先判断是否满足javabean的条件,然后如果再实现一些要求,满足EJB条件就是EJB,否则就是POJO。
Spring支持三种方式配置Bean文件
自动装配、java注解和xml配置(三种允许单独使用或混合使用)
XML中的Bean配置
bean定义
- 常见bean.xml内容
1 |
|
- bean命名
1 | <bean id="bean的唯一标识" name="bean的名称" class="完整类型名称" factory-bean="工厂bean名称" factory-method="工厂方法"/> |
bean名称别名定义规则
名称和别名可以通过bean元素中的id和name来定义,具体定义规则如下::
- 当id存在的时候,不管name有没有,取id为bean的名称;
- 当id不存在,此时需要看name,name的值可以通过
,;
或者空格
分割,最后会按照分隔符得到一个String数组,数组的第一个元素作为bean的名称,其他的作为bean的别名; - 当id和name都存在的时候,id为bean名称,name用来定义多个别名;
- 当id和name都不指定的时候,bean名称自动生成,生成为“完整类名 +#+编号。”eg:
com.hello#0
;
alias元素也可以用来给某个bean定义别名,语法:
1 | <alias name="需要定义别名的bean" alias="别名" /> |
- import——bean汇总
在一个总的bean xml中对其他bean xml进行汇总,相当于把多个bean xml的内容合并到一个里,可以通过import元素引入其他bean配置文件。
在要汇总的bean.xml下
1 | <import resource="其他配置文件的位置" /> |
容器创建bean实例
- 通过反射调用构造方法创建bean对象
- 通过静态工厂方法创建bean对象
- 通过实例工厂方法创建bean对象
- 通过FactoryBean创建bean对象
自动装配
Spring从两个角度来实现自动化装配
- 组件扫描:Spring自动发现应用上下文中所创建的Bean
- 自动装配:Spring自动满足Bean之间的依赖。
通过javaConfig显式配置
全程@Bean注解,通过return返回实例或进行DI配置。
实践部分
创建一个Maven projects并导入Spring-webmvc所需jar包
- 在IDEA中创建好基于Maven的project。
- 在pom.xml中导入依赖信息:
1
2
3
4
5
6
7
8
9
10
11
12
13<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>3.2.17.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>3.2.17.RELEASE</version>
</dependency>
</dependencies>
注:
- 直接导入这个包的原因是project项目可能需要的jar包特别多,且包之间还有依赖。直接导入一个集成的jar包,把依赖的包全自动下载了,能减少许多麻烦和问题。
- 记个坑:由于我的maven源使用的是阿里云的下载源,故有些jar包版本可能未及时更新,所以IDEA会显示
Dependency 'org.springframework:spring-webmvc:5.2.6.RELEASE' not found
。降低版本可能会解决。