狂神Spring学习笔记 IOC理论(ioc的创建方式,DI注入)

目录

目录

1、Sping

1.3组成

1.4拓展

2.IOC理论

4.ioc的创建方式XML文件

5.sprig配置XML文件

5.1,别名

5.2,bean的配置

5.3,import

 6.DI依赖注入

6.1,构造器注入

6.2,Set方式注入[重点]

6.3,拓展方式注入 

6.4,Bean的作用域(Scope) 

7.bean的自动装配

7.4使用注解进行装配

 8,使用注解开发

在配置类中使得注解生效

1.bean

2.属性如何注入

3.衍生的注解

4.自动装配置

5.作用域

6.小结

9.完全使用Java的方式配置spring

tedu三阶段常用注解


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 字段标记了注解表示了属性可以为空

 如果定义了Autowiredrequired属性为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 按照某种异常类型进行拦截

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值