IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Spring5笔记 -> 正文阅读

[Java知识库]Spring5笔记

Spring框架概述

1. 轻量级框架
2. 降低开发复杂性
3. IOC和Aop
4. 优点多多

入门案例

1. 下载spring
2. 导入相关jar包
3. 创建普通类,编写该类方法
4. xml配置
5. 代码编写:加载配置文件,获取配置创建的对象

IOC容器:Inversion Of Control 控制反转

1. IOC底层原理

  • IOC底层原理:xml解析 + 工厂模式 + 反射(单纯使用工厂模式耦合度不够低)
  • IOC过程:
    第一步:xml配置
    第二步:创建工厂类:Class.forName(class属性值).newInstance()

2. IOC接口

  • IOC容器实现的两种方式:
  1. BeanFactory接口,一般是spring内部使用—>获取对象时才创建对象(懒汉式)
  2. ApplicationContext接口:BeanFactory的子接口,更强大—>加载配置文件时就创建对象(饿汉式)----更好,在启动服务器时就已经创建好对象
  • ApplicationContext接口的两个主要实现类:

    FileSystemXmlApplicationContext("带盘符的路径")
    ClassPathXmlApplicationContext("src下的路径")
    

3. IOC操作Bean管理:即Spring创建对象、注入属性

基于xml方式管理bean

创建对象:

  1. xml配置文件中bean标签配置
  2. 中属性:id,class,name(用于struct)
  3. 默认使用无参构造

注入属性:DI(依赖注入)

(1)使用set方法注入:定义类属性及其set方法,配置xml文件<bean><property name="属性名" value="值"></property></bean>
(2)使用有参构造器注入:定义类有参构造方法,配置xml文件<bean><constructor-arg name="方法参数名" value="值"></constructor-arg></bean>
(3)特别地:p名称空间注入:添加p名称空间xmlns:p=".../chema/p",就可以直接在bean标签中添加p:属性=""
(4)注入属性特殊值:

1.null值:不填value,标签中加<null/>
2.属性值含特殊值:<![CDATA[属性值]]>
3.注入外部bean:<property name="属性名" ref="外部bean的id">
4.注入内部bean:<property>中省略value,里面嵌套一个bean---->外部bean也可以实现
5.注入级联赋值:(1)类似注入外部bean的方式;(2)在1的基础上加<property name="级联的bean.属性" value="">(需要内部bean的get方法)
6.注入数组:<property>中加入<array><value></value></array>
7.注入List:<property>中加入<list><value></value></list>
8.注入set:<property>中加入<set><value></value></set>
9.注入Map:<property>中加入<map><entry key="" value=""></map>
10.集合里的值为对象类型:<property>中加入<list><ref bean="另一个bean的id"></ref></list>
11.把集合注入提取为公共部分:添加util名称空间-xmlns:util="...",xsi:schemaLocation="...",<util:list id="公共标识"><value></value></util:list>

两种bean

  1. 普通bean:配置文件中class属性就决定了返回的类型
  2. FactoryBean:配置文件中class属性和返回的类型可以不一样,创建一个类实现FactoryBean接口,重写方法getObject()定义要返回的类型

bean的作用域:

bean标签中scope属性设置创建的bean实例是单例(默认)还是多例

值为singleton:创建单例对象,在加载配置文件时就创建
值为prototype:创建多例对象,在getBean()时才创建对象
值为request:会把创建的对象放到request域中(了解)
值为session:会把创建的对象放到session域中(了解)

bean的生命周期:

(1)通过无参构造器创建bean实例
(2)调用set方法为bean属性赋值或引用其他bean
(~)调用把bean实例传递给bean后置处理器(BeanPostProcessor)的方法--postProcessBeforeInitialization
(3)调用bean的初始化方法(需手动配置)---<bean init-method="bean类中的方法名">
(~)调用把bean实例传递给bean后置处理器(BeanPostProcessor)的方法--postProcessAfterInitialization
(4)使用bean
(5)调用bean的销毁方法(需手动配置)---<bean destroy-method="bean类中的方法名">,ClassPathXmlApplicationContext.close()

xml自动装配:

很少用到,一般用注解
<bean>标签属性autowire="byName"----->根据属性名称自动装配
<bean>标签属性autowire="byType"----->根据类型自动装配	

引入外部属性文件(properties):

(1)引入context名称空间
(2)<context:property-placeholder location="classpath:properties路径" />
(3)<property>的value="${key}"

基于注解方式管理bean:

bean管理创建对象的注解:

功能都是创建对象

@Component
@Service-----service层
@Controller-----web层
@Repository------dao层

创建对象:

1. 引入aop依赖
2. 开启组件扫描:引入context名称空间,<context:component-scan base-package="扫描包路径">
3. 在类前加@注解(value="实例对象名")----括号内容不写默认实例对象名为小驼峰类名

组件扫描细节配置

<!--示例 1
use-default-filters="false" 表示现在不使用默认 filter,自己配置 filter
context:include-filter ,设置扫描哪些内容
-->
<context:component-scan base-package="com.atguigu" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!--示例 2
下面配置扫描包所有内容
context:exclude-filter: 设置哪些内容不进行扫描
-->
<context:component-scan base-package="com.atguigu">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

注入属性:

  1. @Autowired:根据属性类型注入

  2. @Qualifier:根据属性名称注入,配合@Autowired使用

    第一步:创建service类和dao类并在类前添加创建对象注解
    第二步:在service类中的dao属性前加@Autowired注解,若dao实现类有多个,可以加@Qualifier(value="dao实现类名")
    
  3. @Resource:根据名称类型都可,不属于spring,来自java扩展包

    @Resource:根据类型注入
    @Resource(name="dao实现类名"):根据属性名称注入
    
  4. @Value:普通类型注入

    在属性前@Value(value="属性值")
    

纯注解开发:

1@Configuration+@ComponentScan(basePackages={"扫描包路径"}) 注解一个配置类,代替xml配置
(2new AnnotationConfigApplicationContext(配置类)
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-08-26 11:59:28  更:2021-08-26 12:00:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 9:39:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码