Spring简单学习

Spring

spring ioc(控制反转)

当某个java对象需要调用另外一个Java对象时,不需要再new被调用者,在使用spring后,对象的实例不再由调用者来创建,而是由spring容器来创建,spring容器会负责控制程序之间的关系,而不是由调用者的程序代码直接控制,控制权由调用者转移到spring容器,实现了控制反转

依赖注入

从spring容器角度看,spring容器负责将被依赖对象赋值给调用者的成员变量,相当于为调用者注入它所依赖的实例。

控制反转是一种通过描述(在spring中可以使xml文件或注解)并通过第三方去产生或获取特定对象的方式。在spring中实现控制反转的是ioc容器,实现方法是依赖注入。

ApplicationContest

  1. 提供完整的ioc服务支持,管理bean的工厂,beanfactory的子接口

  2. //初始化spring容器applicationcontext,加载配置文件
    ApplicationContext appCon = new ClassPathXmlApplicationContext(“applicationContext.xml”);
    //通过容器获取test实例
    TestDao tt =(TestDao)appCon.getBean("test";
    tt.sayhello();
    

    通过web服务器实例化applicationContext容器

    在web.xml中添加代码

    <context-param>
      	<!-- 加载src目录下的applicationContext.xml文件 -->
      	<param-name>contextConfigLocation</param-name>
      	<param-value>
      		classpath:applicationContext.xml
      	</param-value>
      </context-param>
      <!-- 指定以ContextLoaderListener方式启动Spring容器 -->
      <listener>
      	<listener-class>
      		org.springframework.web.context.ContextLoaderListener
      	</listener-class>
      </listener>
    
    

在Spring中实现IoC容器的方法是依赖注入,依赖注入的作用是在使用Spring框架创建对象时,动态地将其所依赖的对象(如属性值)注入Bean组件中。Spring框架的依赖注入通常有两种实现方式:一种是构造方法注入,另一种是属性setter方法注入。

springbean

Spring可以看作一个大型工厂,生产和管理Spring容器中的Bean。如何使用这个工厂生产和管理Bean,需要开发者将Bean配置在Spring的配置文件中。Spring框架支持XML和Properties两种格式的配置文件,在实际开发中,常用XML格式的配置文件。

Bean的装配可以理解为将Bean依赖注入到Spring容器中,Bean的装配方式即Bean依赖注入的方式。Spring容器支持基于XML配置的装配、基于注解的装配以及自动装配等多种装配方式。本节将主要讲解基于XML配置的装配和基于注解的装配。

Spring aop

面向切面编程,基本单元是aspect。AOP采取横向抽取机制,即将分散在各个方法中的重复代码提取出来,然后在程序编译或运行阶段,再将这些抽取出来的代码应用到需要执行的地方。(日志记录、性能统计、安全控制、事务处理、异常处理)[外链图片转存失败(img-FJKSuRcw-1566196476600)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\1566108670065.png)]

  1. 切面(Aspect)是指封装横切到系统功能(如事务处理)的类。
  2. 连接点(Joinpoint)是指程序运行中的一些时间点,如方法的调用或异常的抛出。
  3. 切入点(Pointcut)是指那些需要处理的连接点。在Spring
    AOP 中,所有的方法执行都是连接点,而切入点是一个描述信息,它修饰的是连接点,通过切入点确定哪些连接点需要被处理。[外链图片转存失败(img-yesTC9kS-1566196476602)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\1566108739302.png)]
  4. 通知(增强处理):由切面添加到特定的连接点(满足切入点规则)的一段代码,即在定义好的切入点处所要执行的程序代码。可以将其理解为切面开启后,切面的方法。因此,通知是切面的具体实现。
  5. 引入(Introduction)允许在现有的实现类中添加自定义的方法和属性。
  6. 目标对象(Target Object)是指所有被通知的对象。如果AOP 框架使用运行时代理的方式(动态的AOP)来实现切面,那么通知对象总是一个代理对象。
  7. 代理(Proxy)是通知应用到目标对象之后,被动态创建的对象。
  8. 组入(Weaving)是将切面代码插入到目标对象上,从而生成代理对象的过程。根据不同的实现技术,AOP织入有三种方式:编译器织入,需要有特殊的Java编译器;类装载期织入,需要有特殊的类装载器;动态代理织入,在运行期为目标类添加通知生成子类的方式。Spring
    AOP框架默认采用动态代理织入,而AspectJ(基于Java语言的AOP框架)采用编译器织入和类装载期织入。

常用注解:

@Component 该注解是一个泛化的概念,仅仅表示一个组件对象(Bean),可以作用在任何层次上。 下面通过一个实例讲解@Component。

动态代理

jdk动态代理:

必须借助一个接口才能产生代理对象。因此,对于使用业务接口的类,Spring默认使用JDK动态代理实现AOP

cglib动态代理:

JDK 动态代理必须提供接口才能使用,对于没有提供接口的类,只 能采用 CGLIB 动态代理。 CGLIB (Code Generation Library) 是一个高性能开源的代码生成包,采用非常底层的 字节码技术,对指定的 目标类生成一个子类,并对子类进行增强。 在 Spring Core 包中己经 集成了 CGLIB 所需要的 JAR 包,不需要另外导入 JAR 包。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值