Spring1、简介Spring是一个轻量级控制反转(IOC)和面向切面(AOP)的容器框架
spring理念:使现有的技术更加容易使用,整合了现有的技术框架 。
优点:
- Spring是一个开源的免费的框架(容器)!
- Spring是一个轻量级的,非入侵式的框架.
- 控制反转(IOC)面向切面编程(AOP)
- 支持事务的处理,对框架整合的支持
- Spring Boot 一个快速开发的脚手架,基于Spring Boot可以快速的开发单个微服务(约定大于配置)
- Spring Cloud 是基于Spring Boot实现
控制反转就是获得依赖对象的方式反转 。
控制反转是一种通过描述(xml或注解)并通过第三方去生产或获取特定对象的方式 。在Spring中实现控制反转的是IOC容器,其实现方法是依赖注入 。依赖注入:就是利用set方法来进行注入的 。
Spring只需要在xml的配置而文件中进行修改,对象由Spring来创建、管理、装配!
3、IOC创建对象的方式
- 使用无参构造创建对象,默认!
- 要使用有参构造创建对象 。
- 下标赋值
<bean id="user" class="com.kevin.pojo.User"><constructor-arg index="0" value="https://tazarkount.com/read/kevin"/></bean> - 类型(不推荐)
<constructor-arg type="java.lang.String" value="https://tazarkount.com/read/劳务"/> - 参数名
<constructor-arg name="name" value="https://tazarkount.com/read/kevin"/>
- 下标赋值
4、Spring配置4.1、Bean配置
<bean id="user" class="com.kevin.pojo.User" name="user1,user2 user3;user4"/>id:bean的唯一标识符,也相当于我们学过的对象名class:bean对象所对应的全限定名:包名+类型
name:别名,而且name可以同时取多个别名
4.2、import可以将多个配置文件,导入合并一个
规范命名: applicationContext.xml
5、依赖注入5.1、构造器注入 constructor-arg5.2、Set方式注入【重点】依赖注入:Set注入
依赖:bean对象的创建依赖于容器
注入:bean对象中的所有属性,由容器来注入!
- 普通注入
<property name="name" value="https://tazarkount.com/read/劳务"/> - Bean注入
<bean id="address" class="com.kevin.pojo.Address"><property name="address" value="https://tazarkount.com/read/西安"/></bean><property name="address" ref="address"/> - 数组
<property name="books"><array><value>西游记</value><value>三国演义</value><value>红楼梦</value><value>水浒传</value></array></property> - List
<property name="hobbys"><list><value>听歌</value><value>敲代码</value><value>看电视</value></list></property> - Map
<property name="card"><map><entry key="身份证" value="https://tazarkount.com/read/7437583248024"/><entry key="驾驶证" value="https://tazarkount.com/read/437583248024s"/></map></property> - Set
<property name="games"><set><value>LOL</value><value>COC</value><value>BOB</value></set></property> - null
<property name="wife"><null/></property> - Properties
<property name="info"><props><prop key="driver">location</prop><prop key="url">...</prop><prop key="username">root</prop><prop key="password">123456</prop></props></property>
注意点:p命令和c命名空间不能直接使用,需要导入xml约束
xmlns:p="http://www.springframework.org/schema/p"
<bean name="john-modern" class="com.example.Person" p:name="John Doe" p:spouse-ref="jane"/>
xmlns:c="http://www.springframework.org/schema/c"
5.4、bean的作用域

文章插图
spring会在上下文中自动寻找,并自动给bean装配属性!
6.1、在Spring中有三种装配的方式
- 在xml中显示的设置
- 在java中显示配置
new AnnotationConfigApplicationContext(KevinConfig.class)

文章插图
- bean有个属性autowire
- byName:会自动在容器上下文中查找,和自己对象set方法后面值对应的bean的id(id唯一)
- byType:会自动在容器上下文中查找,和自己对象属性类型相同的bean(class唯一)
6.2、使用注解实现自动装配 - 导入约束:context约束 查看代码
<?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:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsd"><context:annotation-config/></beans> - 配置注解支持:<context:annotation-config/>
- 注解说明
- @Autowired: 自动装配通过类型或者名字 如果Autowired不能唯一自动装配上属性,则需要通过@Qualifier("xxx");
- @Resource: 自动装配先通过名字后类型
- @Nullable: 字段标记了这个注解,则说明这个字段可以为null
- @Component 组件 等价于 <bean id="user" class="com.kevin.pojo.User"/>
- @Value("xxx") 相当于<property name="name" value="https://tazarkount.com/read/xxx"/>
- @Component有几个衍生注解,我们在web开发中,会按照mvc三层架构分层!
- dao 【@Repository】
- service 【@Service】
- controller(servlet)【@Controller】
- 这四个注解的功能都是一样的,都是代表将某个类注册到Spring中,装配Bean
- @Scope(“xxx”)作用域
- 静态代理
- 动态代理
- 动态代理和静态代理角色一样
- 动态代理的代理类是动态生成的,不是我们直接写好的!
- 动态代理分为两大类:基于接口的动态代理,基于类的动态代理
- 基于接口---JDK动态代理 ----【我们在这里使用】
- 基于类:cglib
- java字节码实现: javasist
- 可以使真实角色的操作更加纯粹!不用去关注一些公共的业务
- 公共也就就交给代理角色!实现了业务的分工!
- 公共业务发生扩展的时候,方便集中管理!
- 一个动态代理类代理的是一个接口,一般就是对应的一类业务 。
- 一个动态代理类可以代理多个类,只要是实现了同一个接口即可!
- 横切关注点:跨越应用程序多个模块的方法或功能 。即是,与我们业务逻辑无关的,但是我们需要关注的部分,就是横切关注点 。如日志,安全,缓存,事务等等....
- 切面(ASPECT)︰横切关注点被模块化的特殊对象 。即,它是一个类 。
- 通知(Advice) :切面必须要完成的工作 。即,它是类中的一个方法 。
- 目标(Target)︰被通知对象 。
- 代理(Proxy)∶向目标对象应用通知之后创建的对象 。
- 切入点(PointCut):切面通知执行的“地点"的定义 。
- 连接点(JointPoint):与切入点匹配的执行点 。
- 春季老年人吃什么养肝?土豆、米饭换着吃
- 三八妇女节节日祝福分享 三八妇女节节日语录
- 老人谨慎!选好你的“第三只脚”
- 校方进行了深刻的反思 青岛一大学生坠亡校方整改校规
- 脸皮厚的人长寿!有这特征的老人最长寿
- 长寿秘诀:记住这10大妙招 100%增寿
- 春季老年人心血管病高发 3条保命要诀
- 眼睛花不花要看四十八 老年人怎样延缓老花眼
- 香槟然能防治老年痴呆症? 一天三杯它人到90不痴呆
- 老人手抖的原因 为什么老人手会抖
<context:annotation-config/><!--指定要扫描的包,这个包下的注解会生效--><context:component-scan base-package="com.kevin"/>7、代理模式代理模式:动态代理的好处:

文章插图
8、AOP8.1、什么是AOPAOP (Aspect Oriented Programming)意为: 面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术 。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型 。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率 。

文章插图
8.2 、Aop在Spring中的作用提供声明式事务;允许用户自定义切面 。

文章插图
8.3、使用Spring实现Aop【重点】使用AOP织入,需要导入一个依赖包!
<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.5</version></dependency>
