============== 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对象都有一个唯一标识,反应该对象为客户端提供的服务和功能,不包含实现细节。