怎么做点击图片进入网站,设计网站企业网站建设公司,做a视频网站,36氪 wordpress 主题Spring
bean
bean基础配置 bean别名配置 注意事项#xff1a;
获取bean无论是通过id还是name获取。如果无法获取到#xff0c;将抛出异常NoSuchBeanDefinitionException bean的作用范围配置 适合交给容器进行管理的bean
表现层对象、业务层对象、数据层对象、工具对象
不…Spring
bean
bean基础配置 bean别名配置 注意事项
获取bean无论是通过id还是name获取。如果无法获取到将抛出异常NoSuchBeanDefinitionException bean的作用范围配置 适合交给容器进行管理的bean
表现层对象、业务层对象、数据层对象、工具对象
不适合交给容器进行管理的bean
封装实体的域对象 bean实例化的三种方式
bean实例化--构造方法
提供可访问的构造方法 配置 无参构造方法如果不存在将抛出异常BeanCreationException
bean实例化--静态工厂了解
静态工厂 配置 bean实例化--实例工厂与FactoryBean了解
实例工厂 配置 FactoryBean 配置 bean的生命周期
生命周期从创建到消亡的完整过程
bean生命周期bean从创建到销毁的整体过程
bean生命周期控制在bean创建后到销毁前做一些事情 提供生命周期控制方法 控制生命周期控制方法 核心容器
依赖注入方式
setter注入 构造器注入 自动装配 集合注入 加载properties文件
1.开启context命名空间 2.使用context空间加载properties文件 3.使用${}读取加载的属性值 加载properties文件 容器
容器初始化创建容器 获取bean 容器类层次结构图 核心容器总结
容器相关 bean相关 依赖注入相关 注解
注解开发bean 纯注解开发模式
1.定义bean
Component是通用的
Controller
Service
Repository
2.纯注解开发
Configuration注解用于设定当前类为配置类
ComponentScan注解用于设定扫描路径此注解只能添加一次多个数据请用数组格式
由
//加载配置文件初始化容器
ApplicationContext ctx new ClassPathXmlApplicationContext(applicationContext.xml);
变为
//加载配置类初始化容器
ApplicationContext ctxnew AnnotationConfigApplicationContext(SpringConfig.class);
注解开发依赖注入
bean的作用范围
使用Scope定义作用范围
使用PostConstructPreDestroy定义bean生命周期
Scope(singleton)public class BookDaoImpl implements BookDao {public BookDaoImpl(){System.out.println(book dao constructor...);}PostConstructpublic void init() {System.out.println(init);}PreDestroypublic void destrop() {System.out.println(destrop);}}
注解开发依赖注入
使用Autowired注解开启自动装配模式按类型
Servicepublic class BookServiceImpl implements BookService {AutowiredQualifier(bookDao)private BookDao bookDao;public void save() {System.out.println(book service save ...);bookDao.save();}}
注意自动装配基于反射设计创建对象并暴力反射对应属性为私有属性初始化数据因此无需提供setter方法
注意自动装配建议使用无参构造方法创建对象默认如果不提供对应构造方法请提供唯一的构造方法
使用Qualifier注解开启指定名称装配bean
Service
public class BookServiceImpl implements BookService {AutowiredQualifier(bookDao)private BookDao bookDao;
}
注意使用Qualifier注解无法单独使用必须配合Autowired注解使用
使用value实现简单注入
Repository(bookDao)public class BookDaoImpl implements BookDao {Value(itheima)private String name;public void save() {System.out.println(book dao save... name);}} 注意路径仅支持单一文件配置多文件请使用数组格式配置不允许使用通配符* 注解开发管理第三方bean
第三方bean管理
1.使用Bean配置第三方Bean
Configurationpublic class SpringConfig {//1.定义一个方法获得要管理的对象//2.添加Bean表示该方法的返回值是一个beanBeanpublic DataSource dataSource(){DruidDataSource dsnew DruidDataSource();ds.setDriverClassName(com.mysql.jdbc.Driver);ds.setUrl(jdbc:mysql://localhost:3306/spring_db);ds.setName(root);ds.setPassword(root);return ds;}}
2.使用独立的配置类管理第三方Bean
将独立的配置类加入核心配置
方式一导入式
public class jdbcConfig {Beanpublic DataSource dataSource(){DruidDataSource dsnew DruidDataSource();/*ds.setDriverClassName(com.mysql.jdbc.Driver);ds.setUrl(jdbc:mysql://localhost:3306/spring_db);ds.setName(root);ds.setPassword(root);*///相关配置return ds;}
}
使用Import注解手动加入配置类到核心配置此注解只能添加一次多个数据请用数组格式
ConfigurationImport({jdbcConfig.class})public class SpringConfig {}
方式二扫描式不推荐
Configuration
public class jdbcConfig {Beanpublic DataSource dataSource(){DruidDataSource dsnew DruidDataSource();/*ds.setDriverClassName(com.mysql.jdbc.Driver);ds.setUrl(jdbc:mysql://localhost:3306/spring_db);ds.setName(root);ds.setPassword(root);*///相关配置return ds;}
}
使用ComponetScan注解扫描配置类所在的包加载对应的配置类信息
ConfigurationComponentScan(com.itheima.config)public class SpringConfig {}
注解开发实现为第三方bean注入资源
1.简单类型的注入
public class jdbcConfig {Value(com.mysql.jdbc.Driver)private String driver;Value(jdbc:mysql://localhost:3306/spring_db)private String url;Value(root)private String userName;Value(root)private String password;Beanpublic DataSource dataSource(){DruidDataSource dsnew DruidDataSource();ds.setDriverClassName(driver);ds.setUrl(url);ds.setName(userName);ds.setPassword(password);//相关配置return ds;}
}
2.引用类型的注入
public class jdbcConfig {Beanpublic DataSource dataSource(BookDao bookDao){System.out.println(bookDao);DruidDataSource dsnew DruidDataSource();//相关配置return ds;}
}
引用类型注入只需要为bean定义方法设置形参即可容器会根据类型自动装配对象
ConfigurationImport({jdbcConfig.class})ComponentScan(com.itheima)public class SpringConfig {}
Repository(bookDao)public class BookDaoImpl implements BookDao { public void save() {System.out.println(book dao save... );}}
注解开发总结
XML配置对比注解配置 整合
spring整合mybatis
思路分析
MyBatis程序核心对象分析 核心对象为SqlSessionFactoryBuilder 整合MyBatis 整合MyBatis
添加坐标版本号要匹配 添加配置类替换xml文件 具体替换 spring整合JUnit
添加依赖坐标 使用Spring整合JUnit专用的类加载器RunWith(SpringJUnit4ClassRunner.class)
指定spring的配置ContextConfiguration(classesSpringConfig.class)
要测谁就自动装配谁Autowired AOP
AOP简介
AOPAspect Oriented Programming面向切面编程一种编程范式指导开发者如何组织程序结构
作用在不惊动原始设计的基础上为其功能进行功能增强
Spring理念无入侵式/无侵入式 AOP核心概念
连接点JoinPoint可以被AOP控制的方法暗含方法执行时的相关信息
程序执行过程中的任意位置粒度为执行方法、抛出异常、设置变量等
在SpringAOP中理解为方法的执行 切入点PoingCut匹配连接点的条件通知仅会在切入点方法执行时被应用。
匹配连接点的式子
在SpringAOP中一个切入点可以只描述一个具体方法也可以匹配多个方法 通知Advice指哪些重复的逻辑也就是共性功能最终体现为一个方法
在切入点出执行的操作也就是共性操作
在SpringAOP中功能最终以方法的形式呈现 切面Aspect描述通知与切入点的对应关系 通知类定义通知的类 目标对象Target通知所应用的对象
原始功能去掉共性功能对应的类产生的对象这种对象是无法直接完成最终工作的 代理Proxy目标对象无法直接完成工作需要对其功能进行回填通过原始对象的代理对象实现 AOP工作流程
1.Spring容器启动
2.读取所有切面配置中的切入点只读取pt(),不读取ptx() 3.初始化bean判定bean对应的类中的方法是否匹配到任意切入点
*匹配失败创建对象
*匹配成功创建原始对象目标对象的代理对象
4.获取bean执行方法
*获取bean调用方法并执行完成操作
*获取bean是代理对象时根据代理对象的运行模式运行原始方法与增强的内容完成操作
AOP切入点表达式
切入点要增强的方法
切入点表达式要进行增强的方法的描述方式 描述方式一执行com.itheima.dao包下的BookDao接口中的无参数update方法
execution(void com.itheima.dao.BookDao.update())
描述方式二执行com.itheima.dao.impl包下的BookDaoImpl类中的无参数update方法 切入带你表达式标准格式动作关键字访问修饰符 返回值 包名.类/接口名.方法名(参数)异常名
execution(public User com.itheima.service.UserService.findById(int))
动作关键字描述切入点的行为动作例如execution表示执行到指定切入点
访问修饰符publicprivate等可以省略
返回值
包名
类/接口名
方法名
参数
异常名方法定义中抛出指定异常可以省略 可以使用通配符描述切入点快速描述
*单个独立的任意符号可以单独出现也可以作为前缀或者后缀的匹配符出现 ..多个连续的任意符号可以独立出现常用于简化包名与参数的书写 专用于匹配子类类型 书写技巧
所有代码按照标准规范开发否则以下技巧全部失效
描述切入点通常描述接口而不描述实现类
访问控制修饰符针又书妾口开发均采用 public 描述可省略访问控制修饰符描述
返回值类型对于增删改类使用精准类型加速匹配对于查询类使用通配快速描述
包名书写尽量不使用..匹配效率过低常用做单个包描述匹配或精准匹配
接口名类名书写名称与模块相关的采用*匹配例如 Userservice 书写成 Service 绑定业务层接口名
方法名书写以动词进行精准匹配名词采用匹配例如 getByld 书写成getBy*, selectAll 书写成 selectAll
参数规则较为复杂根据业务方法灵活调整
通常不使用异常作为匹配规则
AOP通知类型
AOP通知描述了抽取的共性功能根据共性功能抽取的位置不同最终运行代码时要将其加入到合理的位置
AOP通知共分为5种类型
前置通知 后置通知 环绕通知重点 返回后通知了解
抛出异常后通知了解 AOP通知获取数据
获取切入点方法的参数
JoinPoint适用于前置、后置、返回后、抛出异常后通知
ProceedJoinPoint适用于环绕通知 获取切入点方法返回值
返回后通知
环绕通知 获取切入点方法运行异常通知
抛出异常后通知
环绕通知
事务
事务简介
事务作用在数据层保障一系列的数据库操作同成功同失败
Spring事务作用在数据层或业务层保障一系列的数据库操作同成功同失败 1.在业务层接口上添加Spring事务管理
注意事项
Spring注解式事务通常添加在业务层接口中方而不会添加到业务层实现类中降低耦合
注解式事务可以添加到业务方法上表示当前方法开启事务也可以添加到接口上表示当前接口所有方法开启事务
2.设置事务管理器 注意事项
事务管理器要根据实现技术进行选择
MyBatis框架使用的是JDBC事务
3.开启注解式事务驱动 事务角色
事务角色
事务管理员发起事务方在Spring中通常指代业务层开启事务的方法
事务协调员加入事务方在Spring中通常指代数据层方法也可以是业务层方法 事务属性 事务传播行为事务协调员对事务管理员所携带事务的处理态度 SpringMVC
SpringMVC简介
SpringMVC概述
SpringMVC技术与Servlet技术功能等同均属于web层开发技术 SpringMVC是一种基于Java实现MVC模型的轻量级Web框架 优点使用简单开发便捷相比于Servlet
灵活性强 SpringMVC是一种表现出框架技术
SpringMVC用于进行表现出功能开发
入门案例
1.使用SpringMVC技术需要先导入SpringMVC坐标与Servlet坐标 2.创建SpringMVC控制器类等同于Servlet功能 3.初始化SpringMVC环境同Spring环境设定SpringMVC加载对应的bean 4.初始化Servlet容器加载SpringMVC环境并设置SpringMVC技术处理的请求 注解 入门案例工作流程分析
启动服务器初始化过程
1.服务器启动执行ServletContainersInitConfig类初始化web容器
2.执行createServletApplicationContext方法创建了WebApplicationContext对象
3.加载SpringMvcConfig
4.执行ComponentScan加载对应的bean
5.加载UserController每个RequestMapping的名称对应一个具体的方法
6.执行getServletMappings方法定义所有的请求都通过SpringMVC 单次请求过程
1.发送请求localhost/save
2.web容器发现所有请求都经过SpringMVC将请求交给SpringMVC处理
3.解析请求路径/save
4.由/save匹配执行对应的方法save(
5.执行save()
6.检测到有ResponseBody直接将save()方法的返回值作为响应求体返回给请求方
Controller加载控制
因为功能不同如何避免Spring错误的加载到SpringMVC的bean——加载Spring控制的bean的时候排除掉SpringMVC控制的bean SpringMVC相关bean加载控制
SpringMVC加载的bean对应的包均在com.itheima.controller包内 Spring相关bean加载控制
方式一Spring加载的bean设定扫描范围为com.itheima排除掉controller包内的bean
方式二Spring加载的bean设定扫描范围为精准范围例如service包、dao包等
方式三不区分Spring与SpringMVC的环境加载到同一个环境中 请求与响应
请求映射路径
名称RequestMapping
类型方法注解 类注解
位置SpringMVC控制器方法定义上方
作用设置当前控制器方法请求访问路径如果设置在类上统一设置当前控制器方法请求访问路径前缀
范例 属性 value默认请求访问路径或访问路径前缀 SpringBoot
SpringBoot入门
SpringBoot入门程序
1.创建新模块选择spring初始化并配置模块相关基础信息 2.选择当前模块需要使用的技术集 3.开发控制器类 4.运行自动生成的Application类 最简SpringBoot程序所包含的基础文件
1.pom.xml 2.Application类 Spring程序与SpringBoot程序对比 基于idea开发SpringBoot程序需要确保联网且能够加载到程序框架结构 SpringBoot官网创建方式
1.进入官网点击Quickstart Your Project 2.进行配置 3.添加依赖 4.生成zip压缩文件 SpringBoot项目快速启动
1.对SpringBoot项目打包执行Maven构建指令package
2.执行启动指令 注意事项jar执行命令行启动需要依赖Maven插件支持请确认打包时是否具有SpringBoot对应的Maven插件 SpringBoot简介
起步依赖
SpringBoot是由Pivotal团队提供的全新框架其设计目的是用来简化Spring应用的初始搭建以及开发过程 Spring程序缺点
配置繁琐
依赖设置繁琐 SpringBoot程序优点
自动配置
起步依赖简化依赖配置
辅助功能内置服务器...... 起步依赖 含start的为起步依赖 辅助功能之切换web服务器
辅助功能 SpringBoot程序启动
启动方式 SpringBoot在创建项目时采用jar的打包方式
SpringBoot的引导类时项目的入口运行main方法就可以启动项目 使用maven依赖管理变更起步依赖项 Jetty比Tomcat更轻量级可扩展性更强相较于Tomcat谷歌应用引擎GAE已经全面切换为Jetty
基础配置
配置文件格式
修改服务器端口 SpringBoot提供了多种属性配置方式
1.application.properties 2.application.yml 3.application.yaml 自动提示功能消失解决方案 三种配置文件优先级 注意事项
SpringBoot核心配置文件名为application
SpringBoot内置属性过度且所有属性集中在一起修改在使用时通过提示键关键字修改属性
yaml
yaml格式 yaml语法规则 yaml数组数据
数组数据在数据书写位置的下方使用减号作为数据开始符号每行书写一个数据减号与数据间空格分隔 yaml数据读取方式
使用Value读取单个数据属性名引用方式${一级属性名.二级属性名......} 封装全部数据到Environment对象 自定义对象封装指定数据 注意事项
自定义对象封装数据警告解决方案
添加依赖 多环境启动
多环节开发配置
多环境启动 propertie文件多环境启动 多环节命令行启动参数配置
带参数启动SpringBoot 参数加载优先级顺序 多环节开发兼容问题
Maven与SpringBoot多环境兼容
1.Maven中设置多环境属性 2.SpringBoot中引用Maven属性 3.执行Maven打包指令 Maven指令执行完毕后生成了对应的包其中类参与编译但是配置文件并没有编译而是复制到包中 解决思路对于源码中非java类的操作要求加载Maven对应的属性解析${}占位符 4.对资源文件开启对默认占位符的解析 Maven打包加载到属性打包顺利通过 配置文件分类
配置文件分类
在SpringBoot中提供有多级配置文件 整合第三方技术
SpringBoot整合junit
Spring整合junit复习 SpringBoot整合junit SpringBoot整合mybatis
SpringBoot整合SSM Spring整合mybatis复习
1.SpringConfig
导入JdbcConfig
导入MyBatisConfig 2.JDBCConfig
定义数据源加载properties配置项driver、url、username、password 3.MyBatisConfig
定义SqlSessionFactoryBean
定义映射配置 SpringBoot整合MyBatis
1.创建新模块选择Spring初始化并配置模块相关基础信息 2.选择当前模块需要使用的技术集MyBatis、MySQL 3.设置数据源参数 注意事项
SpringBoot版本低于2.4.3不含Mysql驱动版本大于8.0时需要在url连接串中配置时区 或在MySQL数据库端配置时区解决此问题
4.定义数据层接口与映射配置 5.测试类中注入dao接口测试功能