==============
Spring应用程序
==============
1 Spring简介
Spring是开源的Java软件框架,利用这套框架可以快速搭建Java应用程序。
何为框架?
- 框架是半成品的软件
- 框架是一系列的jar包文件,但与普通jar包的不同在于,框架专注解决某些特定的问题:
- 开发效率
- 执行效率
- 安全性
- 代码可维护性
...
- 使用框架进行开发,不必再关心框架所解决的这些问题
- 基于框架编程还需要遵循框架的特定使用方式
Spring框架的所有组件都是基于以下两大核心功能:
- IoC/DI,控制反转/依赖注入
- AOP,面向切面编程
框架的意义在于通过对复杂的封装,提供简单的使用方法。
学习框架重在应用,对其内部原理不必过于纠结,不求甚解最好。
2 控制反转(Inversion of Control,IoC)
主动控制:应用程序主动管理和使用对象,适用于对象管理比较简单的场合。
________ ________
| | | |
| |--管理->| |
|应用程序| | 对象 |
| |--使用->| |
|________| |________|
控制反转:由环境(框架、容器)管理对象,交给应用程序直接使用,适用于对象管理比较复杂的场合。
________ ________
| | | |
| 环境 |--管理->| |
|________| | |
________ | 对象 |
| | | |
|应用程序|--使用->| |
|________| |________|
3 利用容器管理对象
Bean类--------------
|
配置类 |
| Bean方法 v
| 创建并返回Bean类的对象
|
-------------
|
容器类 |
构造方法 v
调用配置类中的Bean方法,保存所获得的Bean对象
getBean(Bean对象标识(默认Bean方法名), ...)
|
v
Bean对象
例程:HelloSpring
创建工程:
IDEA
New Project
Maven
HelloSpring
创建包:
HelloSpring/src/main/java右键
New
Package
cn.tedu
创建Bean类:
cn.tedu右键
New
Java Class
HelloSpring
重写toString方法:
HelloSpring右键
Generate...
toString()
public class HelloSpring {
@Override
public String toString() {
return "Hello Spring";
}
}
利用Maven获取Spring包:
用浏览器打开https://mvnrepository.com
搜索spring-context
点击Spring Context
点击5.3.9
复制Maven页签中的文本
org.springframework
spring-context
5.3.9
复制到HelloSpring/src/pom.xml文件中
...
org.springframework
spring-context
5.3.9
点击右上角Load Maven Changes
创建配置类:
cn.tedu右键
New
Java Class
Config
public class Config {
public HelloSpring helloSpring() {
return new HelloSpring();
}
}
添加Configuration和Bean注解:
@Configuration
public class Config {
@Bean
public HelloSpring helloSpring() {
return new HelloSpring();
}
}
Configuration注解:
- 用于定义配置类,可替换XML配置文件
- 配置类中包含一到多个被Bean注解的方法
- 被Bean注解的方法将被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类扫描,用于构建Bean的定义,初始化Spring容器
- 配置类需要满足如下要求:
- 不能是final类
- 不能是匿名类
- 如需嵌套,必须是静态类
Bean注解:
- 表示该方法是用于创建Bean对象的
- Bean方法定义在配置类中
- Bean方法会在加载配置类时由框架自动调用
- Bean方法的访问权限一般是public
- 可以是任何权限,Spring通过反射调用Bean方法
- 从设计规范角度,定义为public较为合理
- Bean对象的标识(ID)默认取自Bean方法的名称,除非在Bean注解的属性中特别指定
- Bean方法可以没有参数,也可以将任何被Spring管理的对象作为参数
测试:
HelloSpring/src/test/java
New
Java Class
HelloSpringTest
public class HelloSpringTest {
public static void main(String[] args) {
// 创建容器,加载配置类,实例化Bean对象,保存在容器中
AnnotationConfigApplicationContext ctx =
new AnnotationConfigApplicationContext(Config.class);
// 根据对象标识,从容器中获取Bean对象
HelloSpring helloSpring = ctx.getBean(
"helloSpring", HelloSpring.class);
// 使用Bean对象
System.out.println(helloSpring);
}
}
Run 'HelloSpringTest.main()'
4 总结
Spring将应用程序配置和应用程序对象(Bean)分离。
Spring负责管理应用程序对象,以正确的依赖顺序创建它们,确保它们在使用前都被初始化。
每个Bean对象都有一个唯一标识,反应该对象为客户端提供的服务和功能,不包含实现细节。