spring框架的概述
spring是轻量级的开源的JavaEE框架
解决企业应用的开发复杂性
spring有两个核心 IOC AOP
IOC:控制反转,把创建对象的过程交给Spring进行管理
AOP:面向切面,不修改源代码的进行功能增强
Spring 先关特点:1.方便解耦 简化开发 2.Aop编程支持 3.方便程序的测试 4。方便集成各种框架
5.方便进行事务的操作
6. 降低Api的开发难度
IOC
1.什么是IOC:
(1)控制反转,把对象的创建和对象调用的过程交给spring的过程
(2)目的:为了耦合度降低
(3)入门案例 IOC实现
2.底层原理
(1)xml解析,工厂模式,反射
3、画图详解
读取配置文件,通过反射去创建对象,本质上是一个对象工厂模式, 进一步降低耦合度
接口(BeanFactory)
IOC思想基于IOC容器完成,底层就像对象工厂
Spring提供IOC实现的两种方式,
(1)BeanFactory 是spring里面内部的使用接口,不提供开发人员使用
特点:加载配置文件时不会去创建里面的对象,只能在获取或者使用的时候才会去创建这个对象
(2) ApplicationContext BeanFactory接口的子接口,提供更多强大的功能,一般由开发人员使用
加载配置文件的时候,就会把你在配置文件的对象进行创建。
(3)ApplicationContext接口有实现类
ClassPathXmlApplicationContext src下的文件
FileSystemXmlApplicationContext 盘符下的内容
具体操作:操作Bean管理
1.什么是Bean管理:
两个操作(1)Spring床架对象(2)注入属性
2.Bean管理操作的两种方式实现
基于xml配置文件实现,
创建对象
<bean id="user" class="com.atguigu.spring.User"></bean>
在spring文件中使用bean标签,标签里面添加对应属性,便可以实现
在bean标签中的属性:
id属性:获取对象时的唯一标识
class属性:创建对象时类的全路径
name属性:作用和id一样 区别:id中不可以加特殊符号,早期属性给strut1提供
创建对象时,默认也是创建无参数构造方法
注入属性
(1)DI:依赖注入,就是注入属性
第一种使用set方法的注入
先创建类,定义属性,然后给出set方法
在spring配置文件中配置对象创建,配置属性注入
第二种注入方式:使用有参数的构造进行注入
1.先创建类和属性,之后构建有参数构造器
2.在xml配置文件中配置bean
了解:p名称空间注入
简化xml配置
xml注入其他类型方式
1.字面量 (1)null值
(2)属性值包含特殊符号
例如value=“<<南京>>" 此时不能通过编译 解决
把<>进行转义<:>;
把带特殊符号内容写到CDATA
基于属性----外部bean
!创建两个类service类和dao类
!在service层调用dao层
!在spring配置文件中去配置
注入属性----内部bean和级联赋值
内部bean
级联赋值
Ioc操作Bean管理(xml注入集合属性)
1.注入数组类型属性
2.注入List集合类型属性
3.注入Map集合类型属性‘
<bean id="ept" class="com.atguigu.spring.Ept">
<property name="age" value="jie"></property>
<property name="name" value="zhang"></property>
<property name="dev" ref="dev"></property>
<property name="dev.ename" value="xuan"></property>
</bean>
<bean id="dev" class="com.atguigu.spring.Dev">
</bean>
<bean id="shuzu" class="com.atguigu.spring.Shuzu">
<property name="cource">
<array>
<value>计算机网络</value>
<value>数据结构</value>
</array>
</property>
<property name="list">
<list>
<value>asd</value>
<value>qwe</value>
</list>
</property>
<property name="map">
<map>
<entry key="Java" value="java"></entry>
<entry key="C" value="c"></entry>
</map>
</property>
<property name="set">
<set>
<value>sad</value>
<value>sadffg</value>
</set>
</property>
</bean>
4.在集合中里面设置对象类型值
<!--创建多个 course 对象-->
<bean id= "course1" class= "com.atguigu.spring5.collectiontype.Course">
<property name="cname" value= "Spring5 框架"></property>
</bean>
<bean id="course2" class="com.atguigu.spring5.collectiontype.Course">
<property name="cname" value="MyBatis 框架"></property>
</bean>
<property name="courseList">
<list>
<ref bean="course1"></ref>
<ref bean="course2"></ref>
</list>
</property>
5.把集合注入部分提取出来
(1)在 spring 配置文件中引入名称空间 util
*<?*xml version="1.0" encoding="UTF-8"*?>*
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd">
(2)使用 util 标签完成 list 集合注入提取
*<!--1 提取 list 集合类型属性注入-->*
<**util****:list** **id=****"bookList"**>
<**value**>易筋经</**value**>
<**value**>九阴真经</**value**>
<**value**>九阳神功</**value**>
</**util****:list**>
*<!--2 提取 list 集合类型属性注入使用-->*
<**bean** **id=****"book"** **class=****"com.atguigu.spring5.collectiontype.Book"**>
<**property** **name=****"list"** **ref=****"bookList"**></**property**>
</**bean**>
FactoryBean
Spring有两种类型的bean,一种是普通bean,一种是工厂bean
普通bean:在配置文件中定义的类型就是你的返回类型
工厂bean:在配置文件中定义bean的类型可以使不一样的
Bean的作用域
在sprin里面,设置bean实例,是单实例,还是多实例
默认情况下是单实例
如何设置是单实例还是多实例,属性scope可以设置
第一个值,默认值:singleton,表示单实例对象
第二个值, prototype ,表示多个实例对象
singleton和prototype区别
表示单实例和多实例的区别
设置 singleton的时候 ,加载spring配置文件时就会创建单实例对象
设置prototype值时,不是在加载spring配置文件时候创建对象,是在调用getBean方法时创建多实例对象
request
session
Bean的生命周期
1.生命周期
!从对象的创建到对象销毁的过程
2.bean生命周期
!通过构造器创建bean实例(无参数构造)
1为bean属性设置和对其他bean的引用(调用set方法)
!把bean实例传递bean后置处理器的方法
!调用bean初始化的方法(需要进行配置)
!把bean实例传递bean后置处理器的方法
!bean可以使用(对象获取到了)
!当容器关闭时,调用bean的销毁方法(需要进行配置销毁的方法)
引入外部属性文件配置数据库连接池
(1)创建外部属性文件,properties 格式文件,写数据库信息
(2)把外部 properties 属性文件引入到 spring 配置文件中
⚫ 在 spring 配置文件使用标签引入外部属性文件
基于注解方式
什么是注解
!注解是代码的特殊标记,格式:@注解名称(属性名称=属性值,属性名称=属性值)
!使用注解,作用在类的上面,方法上面,属性上面
!目的:简化xml配置
2.spring针对Bean管理中创建对象提供注解()
(1)@Component
(2)@Service
(3)@Controller
(4)@Repository
*上面的功能一样,都可以用来创建bean实例
3.基于注解方式实现对象创建
第一步:引入aop的依赖
第二步:开启组件的扫描
第三步:创建类,在类上加入注解
4.其他组件配置
//表示关闭自动扫描,自定义要扫描Controller类型
<context:component-scan base-package=“com.atguigu.springmvc” use-default-filters=“false”>
<context:include-filter type=“annotation”
expression=“org.springframework.stereotype.Controller”/>
</context:component-scan>
//表示哪些内容不进行扫描
<context:component-scan base-package=“com.atguigu.springmvc”>
<context:exclude-filter type=“annotation”
expression=“org.springframework.stereotype.Controller”/>
</context:component-scan>
5.基于注解方式实现属性的注入(针对对象类型)
@AutoWired :根据属性类型进行自动装配
@Qualifier:根据属性名称进行注入
要和Qualifier注解的使用,要和@Autowired一起使用
@Resource:可以根据类型注入,可根据名称注入
!@Value 根据普通类型
6.完全注解开发
!创建配置类,替代xml配置文件
!编写测试类