目录
目录
1、Sping
1.1简介
spring官网:Spring Framework
maven官网:Maven – Download Apache Maven
1.spring是一个轻量级控制反转(Ioc)和面向切面(Aop)的容器框架
2.spring是一个轻量级的、非入侵式的框架
3.支持事务的处理,对框架整合的支持
1.3组成
支撑所有的核心是core,
1.4拓展
在spring的官网有这个介绍:现代Java开发!说白了就是基于spring开发
springBoot : 一个快速开发的脚手架
基于springBoot可以快速开发单个微服务
约定大于配置
springCloud : 是基于springBooot实现的
现在大部分公司都在基于springBoot进行开发,学习springBoot的前提需要完全掌握spring及springMVC!承上启下的作用
弊端:发展了太久之后违背了原先的理念!配置十分繁琐,人称配置地狱
2.IOC理论
ioc是一种思想,这种思想从本质上的解决了问题,我们程序员不用在管理对象的创建了.系统的耦合性大大降低~可以专一的注重在业务实现上!这是IOC实现的原型!
控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式.在spring中实现控制反转的是Ioc荣光其,实现方法是依赖注入(Dependency Injection,Di)
4.ioc的创建方式XML文件
1.使用无参构造的方式创建对象(默认的,假如没有无参构造spring程序会报错)
给对象的属性注入属性值
2.使用有参构造创建对象
1.通过下标进行属性注入属性值
2.通过属性的类型注入属性值(不建议使用)
3.通过属性名称进行注入
总计:在配置文件加载的时候,容器中管理的对象就已经初始化了
5.sprig配置XML文件
5.1,别名
如果添加了别名,我们也可以使用别名获取到这个对象
5.2,bean的配置
5.3,import
这个import,一般用于团队开发使用,它可以将多个配置文件,导入合并为一个
6.DI依赖注入
6.1,构造器注入
前面已经说过了
6.2,Set方式注入[重点]
- 依赖注入 : Set注入!(假如没有Set方法即注入失效)
- 依赖 : bean对象的创建依赖于容器
- 注入 ; bean对象中的所有属性,由容器来注入
[环境搭建]
不同类型的注入方式(依赖注入之Set注入构造器)
- 普通的String类型
- 引用类型
- 数组
- list
- map
- set
- 空值注入(null)
- Properties
6.3,拓展方式注入
我们可以使用p命名空间和c命名空间进行注入
p命名就是set方式注入,需要无参构造和set方法,c命名时构造器注入,需要有参构造
注意点 : p命名和c命名需要导入约束
6.4,Bean的作用域(Scope)
singleton : 单例模式 (默认模式)
prototype : 原型模式: 每次从容器中get的时候,都会产生一个新的对象!
其余的 :request,session,application,这些只能在web开发中使用到!
7.bean的自动装配
自动装配是spring满足他们bean依赖一种方式
spring会在上下文中自动寻找,并自动给bean装配属性
在spring中三种装配的方式
1.在xml中显示的配置
2.在Java中显示配置
3.隐式的自动装配 [重要]
7.4使用注解进行装配
jdk1.5支持注解
spring2.5支持注解开发
1.导入约束 : context
2.配置注解支持:
@Autowired 自动注入注解,利用反射实现的
直接在属性上添加即可!也可以在set方法上使用
使用autowired我们就可以不用编写set方法了,前提是你这个自动装配的属性在IOC(spring)容器中存在,且符合名字byname
科普:
@nullable 字段标记了注解表示了属性可以为空
如果定义了Autowired的required属性为false,说明这个对象可以为null,否则不允许为空
如果的环境比较复杂,自动装配无法通过一个注解[@Autowired]完成的时候、我们可以使用@Qualifier(value="xxx")去配置@Autowired的使用,指定一个唯一的bean对象注入!
@Autowired自动装配
@Qualifier 按照名称进行注入
@Resource自动装配
小结:@Autowired和@Resource
- 都是用来自动装配的,都可以放在属性字段上
- @Autowired 通过byname的方式实现,而且必须要求这个对象存在! [常用]
- @Resource 默认通过byname的方式实现,如果找不到名字,则通过bytype实现!如果都找不到的情况下,就报错!
- 执行顺序不同: @Autowired 通过byType的方式实现 @Resource 默认通过byname的方式实现
8,使用注解开发
在spring5之后,要使用注解开发,必须保证aop的包导入了
使用注解导入contex约束,增加注解的支持!
@Component : 组件,放在类上,说明这个类被spring容器管理了,就是bean!
在配置类中使得注解生效
1.bean
2.属性如何注入
3.衍生的注解
@Component 有几个衍生注解,我们在web开发中会按照mvc三层架构分层!
- DAO层 @Repository :
- Service层 @Service:
- Controller : @Controller:
这四个注解的功能是一样的,都是讲某个类注册到spring容器中,装配bean
4.自动装配置
5.作用域
6.小结
xml与注解
- xml更加万能,适用于任何场合!维护简单方便
- 注解: 不是自己类使用不了,维护相对复杂
xml与注解最佳实践:
- xml用来 管理bean;
- 注解只负责完成属性的注入;
- 我们在使用的过程中,只需要注意一个问题:必须让注解生效,就需要开启注解的支持
9.完全使用Java的方式配置spring
我们现在完全使用spring的xml配置了,全权交给java来做!
JavaConfing是spring的一个子项目,在spring 4 之后,他成为了一个核心功能
tedu三阶段常用注解
常用注解
@Configuration 标识当前类是配置类
@ComponentScan 包扫描注解 扫描注解
@Bean 标识该方法的返回值交给Spring容器管理
@Scope 控制多例和单例
@Lazy 懒加载
@PostConstruct 初始化方法
@PreDestroy 销毁方法
@Component 将当前类未来的对象交给容器管理
@Autowired 按照类型进行注入
@Qualifier 按照名称进行注入
@Repository 标识持久层注解
@Service 标识Service层
@Controller 标识Controller层
@Value 为属性赋值 @Value("${key}")
@PropertySource 加载指定路径的配置文件properties
@Aspect 标识当前类是一个切面类
@Pointcut 用于定义切入点表达式 表达式写法4种
@EnableAspectJAutoProxy 让AOP的注解有效果
@Before AOP-前置通知
@AfterReturning AOP-后置通知
@AfterThrowing AOP-异常通知
@After AOP-最终通知
@Around AOP-环绕通知
@Order(1) //可以利用order关键字 实现AOP的排序 数字越小越先执行.
@ResponseBody 将返回的数据转化为JSON串, 如果是字符串本身 原数据返回
@RequestMapping("/hello") 实现浏览器的请求路径与方法的映射
@PathVariable restFul结构,接收参数的注解.
@GetMapping("") 只能接收GET请求类型
@DeleteMapping("") 只能接收DELETE请求类型
@PostMapping("") 只能接收POST请求类型
@PutMapping("") 只能接收PUT请求类型
@RestController 表示Controller类,同时要求返回值为JSON
@CrossOrigin 允许跨域访问
@RequestBody 参数接收时,将JSON串转化为java对象 json中的key与对象的属性一致.
@Data lombok动态生成get/set/toString/equals/hashcode等方法
@Accessors 控制是否开启链式加载结构
@NoArgsConstructor 生成无参构造方法
@AllArgsConstructor 生成全参构造方法
@Mapper mybatis将当前的接口交给Spring容器管理. Map<类名小写,JDK动态代理对象>
@SpringBootTest 该注解的作用在进行代码测试时启动spring容器,之后动态的获取对象 注意包路径 主启动类的同包及子包中.
@Param Mybatis中将参数封装为Map集合. @Param(“maxAge”) int maxAge
@Alias Mybatis中定义对象的别名 @Alias(“User”)
@MapperScan Mybatis中扫描指定包路径的接口 为其创建代理对象.
@Insert Mybatis 新增操作注解
@Update Mybatis 修改操作注解
@Delete Mybatis 删除操作注解
@Select Mybatis 查询操作注解
@Transactional Spring中用来控制事务
@RestControllerAdvice Controller层的全局异常处理
@ExceptionHandler 按照某种异常类型进行拦截