2021-06-14

Spring基础1

动力节点spring视频总结
视频链接:https://www.bilibili.com/video/BV1ii4y1K72R
- spring是什么

spring是为了解决企业开发的复杂性创建的轻量级java开发框架,spring的核心思想是IOC(控制反转)和AOP(面向切面编程)。
IOC可以简单理解为:原本需要手动创建对象,有了spring以后,交给spring创建,控制权给了spring,所以叫控制反转。
AOP可以简单理解为:java开发中有许多重复性的事务管理代码,把这些代码抽离出来,交给spring管理,只需要关注一些具体功能的代码实现。
- spring体系结构
在这里插入图片描述
- 创建spring项目
1.正常创建一个maven项目
2 .在pom.xml文件中添加spring依赖

<dependency>
	<groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.2.5.RELEASE</version>
</dependency>

3.建立如图文件
在这里插入图片描述
service包中有SomeService接口和他的实现类SomeServiceImpl。
SomeService接口里只有一个doSome方法,无参数无返回值,在SomeServiceImpl里实现类doSome方法,并打印输出一句话“执行了doSome方法”。
resources目录是资源目录,而applicationContext.xml是spring的核心配置文件,可以任意取名字,但一般默认为是applicationContext.xml。在applicationContext.xml中,定义了spring管理的类
在这里插入图片描述
4.在SomeTest测试类
在这里插入图片描述
首先需要加载配置文件,然后通过getBean的方式,从spring容器中获取到SomeServiceImpl类对象,可以调用doSome方法。
正常情况下,我们可以通过new一个SomeServiceImpl的类对象来直接调用doSome方法
现在我们通过spring来创建对象,看似麻烦,实则这是spring的核心思想之一IOC(控制反转)的体现。
- 基于XML的DI(注入)
bean 实例在调用无参构造器创建对象后,就要对 bean 对象的属性进行初始化。初始化是由容器自动完成的,称为注入。
根据注入方式的不同,常用的有两类:set 注入、构造注入
1.set 注入
1.1简单类型注入
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
1.2引用类型注入
当指定 bean 的某属性值为另一 bean 的实例时,通过 ref 指定它们间的引用关系。ref 的值必须为某 bean 的 id 值
在这里插入图片描述
2.构造注入
构造注入是指,在构造调用者实例的同时,完成被调用者的实例化。即使用构造器设置依赖关系。
在这里插入图片描述
3.引用类型属性自动注入
对于引用类型属性的注入,也可不在配置文件中显示的注入。可以通过为标签设置 autowire 属性值,为引用类型属性进行隐式自动注入(默认是不自动注入引用类型属性)。根据自动注入判断标准的不同,可以分为两种:
byName:根据名称自动注入
byType: 根据类型自动注入
3.1 byName:根据名称自动注入
容器是通过调用者的 bean 类的属性名与配置文件的被调用者 bean 的id 进行比较而实现自动注入的
在这里插入图片描述
3.2byType: 根据类型自动注入
使用 byType 方式自动注入,要求:配置文件中被调用者 bean 的 class 属指定的类,要与代码中调用者 bean 类的某引用类型属性类型同源。即要么相同,要么有 is-a 关系(子类,或是实现类)。但这样的同源的被调用 bean
只能有一个。多于一个,容器就不知该匹配哪一个了
在这里插入图片描述
- 基于注解的DI(注入)
使用注解,将不再需要在 Spring 配置文件中声明 bean 实例
需要在spring配置文件中配置组件扫描器,用于指定基本包的扫描注解。
在这里插入图片描述
可以使用(,)或者(;)分割多个包
在这里插入图片描述
不建议直接指定顶级的父包,扫描的时间边长,指定合适的包即可

  • 定义Bean的注解@Component
    在这里插入图片描述
    需要在类上使用注解@Component,该注解的 value 属性用于指定该bean 的 id 值。
    Spring 还提供了 3 个创建对象的注解:
    @Repository 用于对 DAO 实现类进行注解
    @Service 用于对 Service 实现类进行注解
    @Controller 用于对 Controller 实现类进行注解
    这三个注解与@Component 都可以创建对象,但这三个注解还有其他的含义
    @Service 创建业务层对象,业务层对象可以加入事务功能,
    @Controller注解创建的对象可以作为处理器接收用户的请求。
    @Repository,@Service,@Controller 是对@Component 注解的细化,标注不同层的对象。即持久层对象,业务层对象,控制层对象。
    @Component 不指定 value 属性,bean 的 id 是类名的首字母小写
  • 简单类型的value注入
    需要在属性上使用注解@Value,该注解的 value 属性用于指定要注入的值。
    使用该注解完成属性注入时,类中无需 setter。当然,若属性有 setter,则也可将其加到 setter 上。
    在这里插入图片描述
  • byType 自动注入@Autowired
    需要在引用属性上使用注解@Autowired,该注解默认使用按类型自动装配 Bean 的方式。
    在这里插入图片描述
  • byName 自动注入@Autowired 与@Qualifier
    需要在引用属性上联合使用注解@Autowired 与@Qualifier。@Qualifier的 value 属性用于指定要匹配的 Bean 的 id 值。
    在这里插入图片描述
    @Autowired 还有一个属性 required,默认值为 true,表示当匹配失败后,会终止程序运行。若将其值设置为 false,则匹配失败,将被忽略,未匹配的属性值为 null
  • JDK 注解@Resource 自动注入
    Spring 提供了对 jdk 中@Resource 注解的支持。@Resource 注解既可以按名称匹配 Bean,也可以按类型匹配 Bean。默认是按名称注入。
    在这里插入图片描述
    在这里插入图片描述
    - 注解与XML配置文件的对比
    注解优点是: 方便, 直观,高效(
    注解缺点:以硬编码的方式写入到 Java 代码中,修改是需要重新编译代码的。
    XML 方式优点是:配置和代码是分离的,在 xml 中做修改,无需编译代码,只需重启服务器即可将新的配置加载。
    xml 的缺点是:编写麻烦,效率低,大型项目过于复杂。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值