Spring从入门到精通

什么是Spring?

Spring是一个支持快速开发Java EE应用程序的框架。它提供了一系列底层容器和基础设施,并可以和大量常用的开源框架无缝集成,可以说是开发Java EE应用程序的必备。

IOC的技术实现

1.DL 依赖查找

2.DI 依赖注入  你在代码中只需提供要使用的对象名称,对象如何创建、赋值。从容器中获取都是容器自己完成的 

Spring框架使用DI,实现对象的管理,Sping的底层是反射机制

关于Resourcea下applicatonContext.xml中的前置xml格式

<?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:aop="http://www.springframework.org/schema/aop"
         xmlns:context="http://www.springframework.org/schema/context"
         xsi:schemaLocation="http://www.springframework.org/schema/beans
         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
         http://www.springframework.org/schema/aop
         http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
         http://www.springframework.org/schema/context
         http://www.springframework.org/schema/context/spring-context-3.0.xsd">

一定要按照如下格式

在applicatonContext.xml中

设值注入跟类有无这个属性无关,只需类中有这个set方法即可

property  代表的是方法属性   name代表的是set方法后的名字   value代表的是值

constructor-arg  代表的是构造方法  index代表的是构造参数的位置    value代表的是值

autowire 代表的是自动注入  Spring会根据byname去匹配引用的对象

scope代表的作用域 

1、singleton 作用域

当一个bean的 作用域设置为singleton, 那么Spring IOC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。换言之,当把 一个bean定义设置为singleton作用域时,Spring IOC容器只会创建该bean定义的唯一实例。这个单一实例会被存储到单例缓存(singleton cache)中,并且所有针对该bean的后续请求和引用都 将返回被缓存的对象实例,这里要注意的是singleton作用域和GOF设计模式中的单例是完全不同的,单例设计模式表示一个ClassLoader中 只有一个class存在,而这里的singleton则表示一个容器对应一个bean,也就是说当一个bean被标识为singleton时 候,spring的IOC容器中只会存在一个该bean。

2、prototype

prototype作用域部署的bean,每一次请求(将其注入到另一个bean中,或者以程序的方式调用容器的 getBean()方法)都会产生一个新的bean实例,相当与一个new的操作,对于prototype作用域的bean,有一点非常重要,那就是Spring不能对一个prototype bean的整个生命周期负责,容器在初始化、配置、装饰或者是装配完一个prototype实例后,将它交给客户端,随后就对该prototype实例不闻不问了。

Component-scan工作方式:spring会扫描遍历base-package指定的包,把包中和子包中的所有类,找到类中的注解,按照注解的功能创建对象,或给属性赋值

@Component  创建对象,等同于<bean>功能

@Component和@Bean的区别

https://www.cnblogs.com/zoe-java/p/11542484.html

Spring中和@Component功能一直,创建对象的注解还有:

1.@Repository (用在持久层类的上面):放在dao的实现类上面,表示创建dao对象,dao对象是访问数据库的

2.@Service(用在业务层类的上面):放在service的实现类上面,创建service对象,service对象是做业务处理,可以有事务等功能

3.@Controller(用在控制器上面):放在控制器(处理器)类的上面,创建控制器对象的,控制器对象,能够接受用户提交的参数,显示请求的处理结果

以上三个注解的语法和Compoent一样的,都能创建对象,但是这个三个注解还有额外的功能

@Autowired :spring框架提供的注解,实现引用类型的赋值

spring中通过注解给引用类型赋值,使用的是自动注入原理,支持byType,byNmae

Autowired:默认使用的是byType的自动注入

@Resource : jdk中的注解,使用自动注入给引用变量赋值,支持byType,byNmae,默认是byName

注解的使用步骤

1.加入依赖:spring-context ,间接加入spring-aop

2.在类中加入注解

3.在spring的配置文件中,加入组件扫描器

<context:component-scan base-package="anno"/>

Ioc能实现业务对象之间的解耦合,例如service和dao 之间的解耦合

Aop的作用

1.在目标类不修改源代码的情况下,增加功能

2.减少重复代码

3.专注业务功能的实现

4.解耦合:业务功能和日志,事务这些非业务功能的耦合

什么时候考虑使用AOP技术

1.当你要给一个系统中存在的类修改功能,但是原有类的功能不完善,但是你还有源代码,使用aop功能

2.你要给项目中的多个类,增加一个相同的功能,使用aop

aop的实现框架

1.spring实现了aop,实现方式是接口

2.aspect框架(1.使用注解可以实现aop的功能  2.使用xml配置文件中的标签实现aop功能)

3.aop中概念(1.aspect:切面,表示给业务方法增加的功能,一般日志输出,事务,权限检查是切面  2.pointcut切入点,是一个或多个joinpoint的集合,表示切面执行的位置)

4.advice:通知,也叫增强,表示切面执行的时间,在方法前,方法后等等

aspect框架框架的使用

1.表示切面的执行时间,使用的通知注解--Before前置通知,在目标方法之前执行切面的功能

xml中按如下格式

<aop:config>
    <aop:aspect ref="myAspect">
        <aop:pointcut id="aa" expression="execution( * do*())" />
    <aop:before method="Before" pointcut-ref="aa" />
    </aop:aspect>
</aop:config>  
其中myAspect表示的是声明的切面类的对象

2.表示切面位置的切入点表达式:execution(访问修饰符 返回值 包名,类名,方法名称(方法的参数) 异常)

3.

切面中常见切面的表达式

https://blog.csdn.net/w605283073/article/details/82999927

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值