帮人做彩票网站有事吗,设计本质,设计说明翻译,单页设计模板文章目录一、Spring概念1.容器2.IoC3.DI4.Ioc与DI的关系二、Spring创建与使用1.Maven2.添加Spring框架支持注#xff1a;国内的Maven源配置3.简单实例#xff08;1#xff09;创建一个Bean对象。#xff08;2#xff09;将Bean对象存储到Spring当中#xff08;3#xff…
文章目录一、Spring概念1.容器2.IoC3.DI4.Ioc与DI的关系二、Spring创建与使用1.Maven2.添加Spring框架支持注国内的Maven源配置3.简单实例1创建一个Bean对象。2将Bean对象存储到Spring当中3从spring中读取到Bean对象。a先得到Spring上下文对象。ApplicationContext与BeanFactory的关系b从Spring中取出bean对象四、简单的将对象存储到Spring中1.五大类注解命名规则为什么需要五个类注解五大类注解用途重点2.方法注解Bean五、更加简单的对象注入1.属性注入2.Setter注入3.构造方法注入Autowired与Resource的关系六、Bean的作用域与Spring的生命周期1.Bean的作用域LombokBean作用域分类2.Spring的执行流程3.Bean生命周期一、Spring概念
Spring是一个开源框架是一个包含了众多工具方法的IoC容器。可以用来将Bean对象放入和取出。
1.容器
之前接触过的容器 List/Map数据存储容器。 TomcatWeb容器。
2.IoC
IoCInversion of Control控制反转把创建对象的权利交给容器对象的实例不再由调用者来创建而是由容器来创建容器会负责控制程序之间的关系而不是由调用者的程序代码直接控制。控制权由应用代码转移带了容器控制权发生了反转这就是控制反转。 Spring也是一个容器是一个IoCInversion of Control容器。
3.DI
DI依赖注入动态的将某个类引入当前类的行为/机制。
例如构造一辆车需要框架框架需要底盘底盘需要轮胎制造轮胎需要知道轮胎的大小如果需要改变轮胎的大小或者其他竖向属性需要改动每一个与之有依赖的对象高耦合而当前的方法直接将轮胎对象注入底盘底盘对象注入框架框架对象注入车在需要改动轮胎大小等属性的时候只需要在轮胎对象中修改即可而底盘和框架对象则不需要再有变动这样子降低了耦合度。
以前方法
现在方法
4.Ioc与DI的关系
IoC是“目标”也是一种思想DI是具体的实现。例如今天我想去吃一顿那好的这是一种目标和思想IoC最后我今天吃了烤肉这就是DI。
二、Spring创建与使用
1.Maven 2.添加Spring框架支持
在pom.xml中注入依赖并点击Maven的刷新按钮。 dependencies!-- https://mvnrepository.com/artifact/org.springframework/spring-context --dependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion5.2.3.RELEASE/version/dependency!-- https://mvnrepository.com/artifact/org.springframework/spring-beans --dependencygroupIdorg.springframework/groupIdartifactIdspring-beans/artifactIdversion5.2.3.RELEASE/version/dependency/dependencies注国内的Maven源配置 3.简单实例
创建一个普通类的main方法运行Spring框架。
1创建一个Bean对象。
2将Bean对象存储到Spring当中
a在resources下创建一个spring配置文件。
spring-config.xml
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
/beansb将Bean对象配置到spring配置文件中。
3从spring中读取到Bean对象。
a先得到Spring上下文对象。
方式一
//1.先得到 Spring 对象ApplicationContext context new ClassPathXmlApplicationContext(spring-config.xml);方式二BeanFactory
BeanFactory beanFactory new XmlBeanFactory(new ClassPathResource(spring-config.xml));ApplicationContext与BeanFactory的关系
相同点 1.都可以得到Spring上下文对象 2.都是来自Spring的顶级接口。 不同点 1.继承关系和功能ApplicationContext属于BeanFactory的子类BeanFactory只有最基础访问Bean的能力而ApplicationContext除了拥有BeanFactory功能之外还包含了更多的功能如国际化支持、资源访问、事件传播等。 2.性能ApplicationContext加载方式是将Bean对象一次性加载所以在后面访问Bean对象时很快饿汉模式BeanFactory需要某个Bean时采取加载Bean对象所以它在执行Bean获取时比较慢。
b从Spring中取出bean对象
方式一根据 bean 的名称标识获取bean对象 //根据 bean 的名称标识获取bean对象User user (User) context.getBean(user);//取user方式二根据 bean 类型获取 bean //根据 bean 类型获取 bean多个bean时会报错User user3 context.getBean(User.class);方式三根据 bean名称 bean类型 获取bean User user4 context.getBean(user,User.class);//1.先得到 Spring 对象ApplicationContext context new ClassPathXmlApplicationContext(spring-config.xml);//2.从Spring中取出bean对象User user (User) context.getBean(user);//3.使用Bean可选System.out.println(user.sayHi());四、简单的将对象存储到Spring中
1.五大类注解
命名规则 命名规则如果第一个字母和第二个字母不为大写则命名为将首字母小写否则命名为原类名。
为什么需要五个类注解
1通过类注解可以了解当前类的用户例如车牌前有地域的划分等。 2功能有细微不同。
五大类注解用途重点
1Controller控制器归属于业务逻辑层用来控制用户的行为它用来检查用户参数的有效性。
2Service服务归属于服务层调用持久化类实现响应的功能。不直接和数据库交互它类似于控制中心
3Repository仓库归属于持久层是直接和数据库进行交互的通常每一个表都会对应一个Repository。
4Configuration配置归属于配置层是用来配置当前项目的一些信息的。
5Component组件归属于公共工具类提供某些公共方法。
注Component是除了它自己的其他四个类的父类。
2.方法注解
存对象到Spring中方法二。
Bean
Bean将当前修饰方法的方法对象存储到Spring当中。 1Bean要与五大类配合使用 2获取Bean时如果没有给注入的Bean进行命名则直接用方法名获取如果使用了name属性命名则需要用设置的方法名进行获取。 3给Bean设置了name属性之后实验原方法名就不能获取对象了只能使用设置的名称才能获取。
注Bean注解一定要配合5大类注解一块使用否则是无效的方法注解。
五、更加简单的对象注入
Autowired Resource
1.属性注入
使用属性注入的方式获取Bean 优点:实现简单。 缺点 1不可注入一个不可变final的对象一般final修饰的属性要么直接赋值要么在构造方法中初始化。 2只适用于IoC容器。 3更容易违背单一性原则。针对类级别写法简单更容易犯错
2.Setter注入 优点更加符合单一设计原则。针对对象方法级别写法麻烦用的时候才会去写 缺点 1不能注入不可变对象。 2注入对象可被修改。由于set方法是普通方法可重复调用被调用时存在被修改的危险
3.构造方法注入
构造方法注入是Spring官方从4.x之后推荐的注入方式。 优点 1可以注入一个不可变对象. 2注入的对象不会被修改。 a加了final修饰符。 b构造方法就是随着类加载只执行一次的不像set有可能执行多次被修改的风险 3注入的对象会被完全初始化。 4通用性更好。
总结日常开发中使用属性注入实现更简单的读取Bean依然是主流的方式。
Autowired与Resource的关系
相同点都是用来实现依赖注入的。 不同点 1功能支持不同Autowired支持属性注入、setter注入、构造方法注入Resource支持属性、setter注入但不支持构造方法注入。 2出身不同Autowired来自Spring框架而Resource来自于JDK。 3参数支持不同Resource支持更多的参数设置而Autowired只支持required参数。
1.Resource的属性注入与Autowired的属性注入对比 2.setter注入方法都差不多。
六、Bean的作用域与Spring的生命周期
1.Bean的作用域
Bean作用域Bean在整个Spring框架项目中的某种行为模式。
Lombok
lombok简化Java开发的一个工具为了更简单的替代Java中必要代码的一种实现工具。 lombok使用 1.在项目中引用lombok。 1在pom.xml中添加依赖。 !-- https://mvnrepository.com/artifact/org.projectlombok/lombok --dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion1.18.24/versionscopeprovided/scope/dependency
2在setting-plugingz中下载lombok插件。 DataSetterGetterToString
Bean作用域分类
1singleton单例模式。默认作用域作用于IoC容器。 默认UserBean的作用域为Scope(“singleton”) 2prototype原型模式多例模式 Scope(“prototype”) 3request请求作用域。 4session会话作用域。-类似多线程中的ThreadLocal 5application全局作用域。作用于servlet容器应用在Spring MVC中。 6websocket应用在Spring WebSocket中。
2.Spring的执行流程
1启动容器启动项目 2读取配置文件初始化。 a使用xml直接注册bean b配置bean跟扫描路径。 3将bean存储到spring中通过类注解进行扫描和装配。 4将bean从spring读取出来装配到响应的类。
3.Bean生命周期
生命周期指的是一个对象从诞生到销毁的整个生命过程我们把这个过程就叫做一个 对象的生命周期。Bean的生命周期分为以下5大部分在这里插入代码片 1实例化对应JVM中的“加载”从无到有将字节码转换成内存中的对象只是分配了内存。 2设置属性Bean注入和装配 3初始化 a各种通知 b初始化的前置工作 c进行初始化工作使用注解PostConstruct初始化、使用xmlinit-method初始化 d初始化的后置工作。 4使用Bean 5销毁Bean。 实例化-》设置属性-》初始化