Spring配置文件
- Spring体系结构
- Spring开发步骤
groupId一般分为多个段,这里我只说两段,第一段为域,第二段为公司名称。域又分为org、com、cn等等许多,其中org为非营利组织,com为商业组织。举个apache公司的tomcat项目例子:这个项目的groupId是org.apache,它的域是org(因为tomcat是非营利项目),公司名称是apache,artigactId是tomcat。
- Bean标签范围配置
scope:指对象的作用范围,取值如下:
(1)当scope的取值为singleton时
Bean的实例化个数:1个
Bean的实例化时机:当Spring核心文件被加载时,实例化配置的Bean实例
Bean的生命周期:
对象创建:当应用加载,创建容器时,对象就被创建了
对象运行:只要容器在,对象一直活着
销毁:当应用卸载,销毁容器时,对象就被销毁了
(2)当scope的取值为prototype时
Bean的实例化个数:多个
Bean的实例化时机:当调用getBean()方法时实例化Bean
对象创建:当使用对象时,创建新的对象实例
对象运行:只要对象在使用中,就一直活着
对象销毁:当对象长时间不用时,被 Java 的垃圾回收器回收了
- Bean生命周期配置
1、构建: 单例模式的Bean在容器启动时构建,多例模式在每次调用Bean时构建;
2、初始化: 构建完成,并赋值后(?) ,运行初始化方法, 不管单例还是多例都会运行初始化方法;
3、销毁:只有单例Bean在容器销毁时会运行销毁方法,多例模式Bean不运行销毁方法.
initMethod--初始方法
destroyMethod--销毁方法
- Bean实例化三种方式
使用无参的构造器实例化(常用的)
使用静态工厂方法实例化
使用实例工厂方法实例化
- Bean的依赖注入概念
依赖注入(Dependency Injection)和控制反转(Inversion of Control)是同一个概念。具体含义是:当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java实例,被调用者)的协助时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring里,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者 实例的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入。
- Bean的依赖注入方式
set方法
p命名空间注入
构造方法
- Bean的依赖注入的数据类型
注入数据的三种数据类型
普通数据类型
引用数据类型
集合数据类型
今天就这些啦,明天继续加油!!!
第二天
- Spring的重点配置
<bean>标签
id属性:在容器中Bean实例的唯一表示,不允许重复
class属性:要实例化的Bean的全限定名
scope属性:Bean的作用范围,常用Singleton(默认)和prototype
<constructor-arg>标签
<property>标签:属性注入
name属性:属性名称
value属性:注入的普通属性值
ref属性:注入的对象引用值
<list>标签
<map>标签
<properties>标签
<import>标签:导入其他的Spring的分文件
- ApplicationContext的实现类
*ClassPathXmlApplicationContext:它可以加载类路径的配置文件,要求配置文件必须在类路径下,如果不在则加载不了
*FileSystemXmlApplicationContext:它可以加载磁盘任意路径下的配置文件(必须有访问权限)
*AnnotationConfigApplicationContext:它是用于读取注解创建容器的
- getBean( )方法的使用
1.boolean containsBean(String name): 判断容器中是否含有id为name的bean实例,
2.Class<?>getType(String name): 返回容器中id为name的bean实例的类型
3.Object getBean(String name): 返回容器中id为name的bean实例
可以看到,通过id方式获取对象,返回的是Object类型,需要强制转换类型来获取指定类型。
4.<T>T getBean(Class<T> requiredType): 返回容器中属于requiredType类型的、唯一的bean实例。
这里解释一下唯一是什么意思:这里的唯一指的是,当用指定类型的方式获取spring容器中bean对象时,spring容器中的那个类型的bean只能声明一个!而不是说你只能写一次getBean(Book.class)的意思,你可以写很多很多个,当你没声明scope是多例的时候,你声明再多个也只是给你同一个对象。
<T>T getBean(String name,Class<T> requiredType): 返回容器中id为name并且属于requiredType类型的Bean实例。
Spring配置数据源
- 数据源(连接池)
常见的数据源(连接池):DBCP、C3P0、BoneCP、Druid等
第三天
- C3P0连接测试
- Druid连接测试
- 抽取jdbc.peoperties配置文件
- Spring容器产生数据源对象
- Spring加载properties文件
Spring注解开发(特别重要!!!)
- spring原始注解
-
Spring是轻代码而重配置的框架,配置比较繁重影响开发,所以注解开发算是一种趋势,注解代替xml配置文件可以简化配置,提高开发效率
-
该原始注解主要替代的配置
-
注解类型及说
注解 | 说明 |
@Component | 使用在类上用于实例化Bean |
@Controller | 使用在web层类上用于实例化Bean |
@Service | 使用在service层类上用于实例化Bean |
@Repository | 使用在dao层类上用于实例化Bean |
@Autowired | 使用在字段上用于根据类型进行依赖注入 |
@Qualifier | 结合@Autowired一起使用用于根据名称进行依赖注入 |
@Resource | 相当于@Autowired+@Qualifier,按照名称进行注入 |
@Value | 注入普通属性 |
@Scope | 标注Bean的作用范围 |
@PostConstruct | 使用在方法上标注该方法是Bean的初始化方法 |
@PreDestory | 使用在方法上标注该方法时Bean的销毁方法 |
注意:
使用注解开发时候需要在applicationContext.xml中进行最近扫描
- Spring新注解
注解 | 说明 |
@Configuration | 用于指定当前类是一个 Spring 配置类,当创建容器时会从该类上加载注解 |
@ComponentScan | 用于指定 Spring 在初始化容器时要扫描的包。 作用和在 Spring 的 xml 配置文件中的 <context:component-scan base-package="com.itheima"/>一样 |
@Bean | 使用在方法上,标注将该方法的返回值存储到 Spring 容器中 |
@PropertySource | 用于加载.properties 文件中的配置 |
@Import | 用于导入其他配置类 |
Spring集成Junit
步骤:
1.导入spring集成Junit的坐标
2.使用@Runwith注解替换原来的运行期
3.使用@ContextConfiguration指定配置文件或配置类
4.使用@Autowired注入需要测试的对象
5.创建测试方法进行测试
SpringMVC简介
- SpringMVC的开发步骤
-
导入SpringMVC的坐标
-
配置servlet
-
编写controller
-
将Controller使用注解配置到Spring容器中
-
配置spring-mvc.xml(配置组件扫描)
-
客户端发起请求测试
- SpringMVC的数据响应
SpringMVC的数据响应方式
页面跳转
直接返回字符串
通过ModelAndView对象返回
回写数据
直接返回字符串
返回对象或集合
注意:
①通过SpringMVC框架注入的response对象,使用response.getWriter(.print("hello world”)回写数据,此时不需要视图跳转,业务方法返回值为void。
②将需要回写的字符串直接返回,但此时需要通过@ResponseBody注解告知SpringMNC框架,方法返回的字符串不是跳转是直接在http响应体中返回。
- SpringMVC获得请求数据
获得请求参数
参数绑定注解
handler method 参数绑定常用的注解,我们根据他们处理的Request的不同内容部分分为四类:
处理requet uri 部分(这里指uri template中variable,不含queryString部分)的注解:PathVariable;
处理request header部分的注解: @RequestHeader, @CookieValue;
处理request body部分的注解:@RequestParam, @RequestBody;
处理attribute类型是注解: @SessionAttributes, @ModelAttribute;
- 文件上传
文件上传客户端三要素
表单提交方式:post (get方式提交有大小限制,post没有)
表单的enctype属性:必须设置为multipart/form-data.
表单必须有文件上传项:file
- 文件上传步骤
导入依赖jar包
配置文件上传解析器,配置MultipartResolver---- CommonsMultipartResovler
编写文件上传代码