东阳网站建设哪家好,wordpress怎么连接数据库,优化网站的公司哪家好,公司网站设计意见软件设计之SSM(1)
路线图推荐#xff1a; 【Java学习路线-极速版】【Java架构师技术图谱】 尚硅谷新版SSM框架全套视频教程#xff0c;Spring6SpringBoot3最新SSM企业级开发 资料可以去尚硅谷官网免费领取
学习内容#xff1a;
Spring框架结构SpringIoC容器SpringIoC实践…软件设计之SSM(1)
路线图推荐 【Java学习路线-极速版】【Java架构师技术图谱】 尚硅谷新版SSM框架全套视频教程Spring6SpringBoot3最新SSM企业级开发 资料可以去尚硅谷官网免费领取
学习内容
Spring框架结构SpringIoC容器SpringIoC实践与应用
1、Spring框架结构
Spring是一个开源的Java框架旨在简化Java企业级应用的开发。Spring Framework是其核心部分提供了依赖注入、面向切面编程和事务管理等功能。所以一般Spring框架指的是Spring Framework广义上的 Spring 泛指以 Spring Framework 为基础的 Spring 技术栈。
Spring Framework主要功能模块
模块功能描述核心容器提供对象管理和依赖注入支持Bean配置和生命周期管理。AOP支持面向切面编程允许将横切关注点如日志、事务与业务逻辑分离。数据访问/集成简化JDBC操作支持ORM框架如Hibernate提供数据访问的统一方式。Web模块支持Spring MVC架构创建Web应用程序提供REST支持和文件上传功能。安全模块提供Spring Security用于应用程序的身份验证和授权。消息模块提供对消息中间件如JMS的支持支持异步处理。声明式事务管理通过注解或XML配置简化事务管理允许在方法上声明事务属性自动处理事务边界。
2、SpringIoC容器 在Spring框架中组件是指由Spring容器管理的对象通常被称为Bean。这些Bean可以是服务、控制器、数据访问对象等Spring负责它们的创建、配置和生命周期管理。 组件管理是Spring的核心功能之一主要通过IoC控制反转 实现。IoC容器负责管理对象的创建和它们之间的依赖关系这使得应用程序的各个部分之间的耦合度降低从而提高了可维护性和可测试性。
组件一定是对象对象不一定是组件 组件是对象 在Spring框架中组件通常称为Bean是通过Spring IoC容器管理的对象。它们的创建、配置和生命周期管理都是由Spring负责。 对象不一定是组件 在Java中任何通过new关键字创建的实例都是对象但这些对象并不一定由Spring容器管理。如果一个对象没有被Spring管理就不能享受Spring提供的特性比如依赖注入、生命周期管理等。 可复用的Java对象 组件通常被设计为可以在不同的上下文中重复使用。因为它们遵循了良好的设计原则比如单一职责原则和依赖注入它们的逻辑可以在不同的场景中使用而不需要进行大量修改。
复杂容器概念引入
复杂容器指的是具有多个层次和功能的容器能够管理和控制多个组件的生命周期、配置和交互。Tomcat不仅负责Servlet的执行还处理了许多其他功能如请求处理、线程管理、会话管理等。Spring IoC 容器负责实例化、配置和组装 bean组件。容器通过读取配置元数据来获取有关要实例化、配置和组装组件的指令。配置元数据以 XML、Java 注解或 Java 代码形式表现。它允许表达组成应用程序的组件以及这些组件之间丰富的相互依赖关系。
IoC容器接口介绍
Spring IoC容器主要通过两个接口来实现BeanFactory和ApplicationContext。它们都负责管理Bean但有一些关键的区别和扩展功能。
特性BeanFactoryApplicationContext定义Spring IoC容器的基本接口BeanFactory的子接口提供更丰富的功能实例化方式延迟初始化仅在需要时创建Bean预实例化在启动时创建所有单例Bean国际化支持无支持多种语言和地区的国际化功能事件传播无支持事件发布和监听机制允许组件间的通信AOP支持无提供面向切面编程的支持适用场景轻量级应用资源使用要求较高的场景复杂应用特别是需要更多功能的企业级应用
ApplicationContext容器实现类
上下文类型功能描述加载方式说明ClassPathXmlApplicationContext从类路径加载XML配置文件适用于在类路径下有配置文件的应用通常用于标准的Java SE应用。从classpath根目录加载配置文件通常是项目的类路径下的resourcesFileSystemXmlApplicationContext从文件系统加载XML配置文件适用于需要从任意路径加载配置文件的场景能够处理绝对或相对路径。直接从文件系统读取配置文件可以使用绝对路径或相对路径。AnnotationConfigApplicationContext以Java注解方式加载配置适合使用注解定义Bean和依赖关系的应用支持使用Configuration和Component注解。通过扫描指定包或类解析注解以注册Bean。WebApplicationContext特殊类型的ApplicationContext用于Web应用提供额外的功能如处理Web层的Bean、会话管理等支持多种Web功能。通常在Web应用中由ContextLoaderListener或DispatcherServlet加载支持XML和注解配置。
配置方式
Spring框架提供了多种配置方式XML配置方式、注解方式和Java配置类方式
特点XML配置Java配置注解配置配置形式使用XML文件定义Bean使用带有Configuration注解的类定义Bean使用类上的注解如Component等自动扫描类型安全否是是可读性可读性一般依赖于XML格式可读性好遵循Java语法可读性好直接在类上定义灵活性灵活但修改后需重启应用灵活支持Java编程中的逻辑灵活支持灵活的包扫描示例bean idmyBean classcom.example.MyClass/Bean public MyClass myBean() {...}Component public class MyClass {...}依赖注入方式通过property或constructor-arg标签通过方法参数和返回值通过构造函数、字段或方法启动方式需要手动指定XML文件通过Java类自动加载配置通过ComponentScan自动扫描
容器、IoC、DI 3、SpringIoC实践与应用
实现步骤
配置元数据此处以XML为例 Spring IoC 容器管理一个或多个组件。这些组件是使用你提供给容器的配置元数据例如以 XML bean/ 定义的形式创建的。 bean / 标签 组件信息声明 id 属性是标识单个 Bean 定义的字符串。 class 属性定义 Bean 的类型并使用完全限定的类名。
?xml version1.0 encodingUTF-8?
!-- 此处要添加一些约束配置文件的标签并不是随意命名 --
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdbean id... [1] class... [2] !-- collaborators and configuration for this bean go here --/beanbean id... class...!-- collaborators and configuration for this bean go here --/bean!-- more bean definitions go here --
/beans实例化IoC容器
提供给 ApplicationContext 构造函数的位置路径是资源字符串地址允许容器从各种外部资源如本地文件系统、Java CLASSPATH 等加载配置元数据。选择一个合适的容器实现类进行IoC容器的实例化工作此处以ClassPathXmlApplicationContext为例
//实例化ioc容器,读取外部配置文件,最终会在容器内进行ioc和di动作
ApplicationContext context new ClassPathXmlApplicationContext(services.xml, daos.xml);获取Bean组件
ApplicationContext 是一个高级工厂的接口能够维护不同 bean 及其依赖项的注册表。通过使用方法 T getBean(String name, ClassT requiredType) 可以检索 bean 的实例。允许读取 Bean 定义并访问它们如以下示例所示
//创建ioc容器对象指定配置文件ioc也开始实例组件对象
ApplicationContext context new ClassPathXmlApplicationContext(services.xml, daos.xml);
//获取ioc容器的组件对象
PetStoreService service context.getBean(petStore, PetStoreService.class);
//使用组件对象
ListString userList service.getUsernameList();