欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring5复习

程序员文章站 2022-03-19 12:06:01
...

1 Spring

简介:目的:为了解决企业应用开发的复杂性spring是一个轻量级控制反转和aop的容器框架

  • 优点:
  • spring是一个开源的免费框架(容器)
  • spring是一个轻量级非入侵式框架,非入侵就是引入该框架不会对原来代码产生影响
  • 支持事务处理,对框架整合支持
  • ioc,aop
  • 总结一句话就是spring是一个轻量级的控制反转和面向切面编程的aop的框架

1.1spring的组成

Spring5复习

1.2 ioc思想

ioc的本质

ioc就是控制反转是一种设计思想,在早期开发过程当用户发来请求,主动权实在我们程序员手指,由程序员手动去new 一个dao接口实现类,这样做耦合程度大大提升,完全是硬编码在程序中。主动权在程序员手中
控制反转后对象的创建转移给第三方个人认为所谓控制反转就是获得对象的方式反转了。使用set方法进行注入,原理 主动权在用户DI只不过是实现ioc的一种方法。
总结就是对象由spring创建,管理装配

2配置bean方法

2.1 通过bean标签;

<bean id="user" class="com.kui.pojo.User">
    <property name="name" value="张三"></property>
</bean>

ioc创建对象默认调用无参构造;
当我们设置了有参构造时且未设置无参构造,还按照上面的方法执行肯定会报错,所以需要另一种方法通过构造方法注入值。

根据下标注入

   <bean id="user" class="com.kui.pojo.User">
<!--      <property name="name" value="张三"></property>-->
      <constructor-arg index="0" value="zhangsi"></constructor-arg>
  </bean>

根据成员变量属性类型注入,不过不推荐使用

 <bean id="user" class="com.kui.pojo.User">
<!--      <property name="name" value="张三"></property>-->
<!--      <constructor-arg index="0" value="zhangsi"></constructor-arg>-->
      <constructor-arg type="java.lang.String" value="zhanga"></constructor-arg>
  </bean>

根据成员变量属性名注入

  <bean id="user" class="com.kui.pojo.User">
<!--      <property name="name" value="张三"></property>-->
<!--      <constructor-arg index="0" value="zhangsi"></constructor-arg>-->
<!--      <constructor-arg type="java.lang.String" value="zhanga"></constructor-arg>-->
      <constructor-arg name="name" value="zhangs"></constructor-arg>
  </bean>

当我们配置bean后,spring会自动帮我们创建对象执行构造方法
总结,当spring加载配置文件后bean对象就被创建了

2.1 别名

  <bean id="user" class="com.kui.pojo.User">
<!--      <property name="name" value="张三"></property>-->
<!--      <constructor-arg index="0" value="zhangsi"></constructor-arg>-->
<!--      <constructor-arg type="java.lang.String" value="zhanga"></constructor-arg>-->
      <constructor-arg name="name" value="zhangs"></constructor-arg>
  </bean>
    <alias name="user" alias="asdasd"></alias>

且在bean标签中可以起多个别名用,或;分割;

2.1 import标签

导入配置

3 依赖注入(DI)

3.1构造器注入

3.2 set方式注入

本质就是set注入

  • 依赖:bean对象的创建依赖于容器
  • 容器:bean对象中的所有属性依赖于容器来注入

3.3 第三方注入
拓展方式注入
比如p标签c标签

4 Scope作用域

singleton 默认是单例
prototype多例,原型模式
request,session,application
只能在web中使用

一般单线程使用单例,多线程使用多例,多例消耗资源

5 spring的自动装配方式

自动装配是满足bean依赖的一种方式
spring会在上下文自动寻找并自动给bean配置属性
三种装配方式

  1. 在xml中配置
  2. 在java代码中配置
  3. 隐式的配置(重要)
<bean id="student" class="com.kui.pojo.Student" autowire="byName">
<bean id="address" class="com.kui.pojo.Address">~

通过Byname Spring会自动寻找并配置成员属性address

<bean id="student" class="com.kui.pojo.Student" autowire="byType">
<bean id="address" class="com.kui.pojo.Address">~

通过ByType Spring会自动寻找并配置成员属性address,要求全局配置文件类型只有一个

使用注解装配

首先要添加注解支持
@Autowired
当定义@autowired(requred=false)时说明注入的对象可以为null否则不允许为空。
@Qualifire
可以通过此注解注入特定的bean比如@qualifire(value=“user1”)

如果autowired配置环境比较复杂我们可以通过@qualifire指定id去注入
@Resource
他不是spring中的注解但也可以帮我们注入

resource和autowired的区别

  • 都是通过放在属性字段上装配的

  • autowired是通过byType注入,对象必须存在否则空指针异常
    如果autowired bytype不唯一则需要通过qualifire指定注入
    resource是先通过byname,如果注入失败则通过byType注入

  • 执行顺序不同

@Nullable
表示可以为空

相关标签: spring java aop