栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring框架之基础学习

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring框架之基础学习

BeanFactory与Applicationcontext

  BeanFactory接口提供了一个抽象的配置和对象的管理机制。
  ApplicationContext是BeanFactory的子接口。它简化了与AOP的整合,消息机制,事件机制以及对web的扩展。
  (1)AOP的支持。AnnotationAwareAspectJAutoProxyCreator作用于Bean的初始化之后。
  (2)配置元信息。
  (3)资源管理(Resource抽象)
  (4)事件驱动机制(ApplicationEvent,ApplicationListener)
  (5)Environment抽象

注解驱动与xml驱动ioc容器互通 xml文件中引入注解驱动

  在xml中药引用注解配置,需要开启注解配置,同时注册对应的配置类:




    
    
    

注解引用xml

  在注解配置中引用xml,需要在配置类上标注@ImportResource注解,并声明配置文件路径。

@Configuration
@ImportResource("classpath:annotation/application.xml")
public class AnnotationConfiguration {
}
引入外部配置文件 通过注解类引入,添加注解@propertySource

  配置类中通过注解@PropertySource引用properties配置文件。
  在扫描类中可以通过占位符来表示注入。${key},key为properties中的key。

通过配置文件引入

对象的注入(component组件类)

  通过注解@Autowire完成对象注入。也可以通过注解@Resource完成对象注入(这个是按照属性名/Bean的名称注入,这个是属于JSR规范的注解))。@Inject注入(根据类型注入,这个是属于JSR规范的注解)。
  如果IOC容器中包含两个类型相同的bean。可以通过注解@Qualifier,指定注入bean的名称。也可以将要注入的bean上标注注解@Primary,含义是默认注入的Bean。

  @Autowired注入的原理逻辑:
  先拿属性对应的类型,去 IOC 容器中找 Bean ,如果找到了一个,直接返回;如果找到多个类型一样的 Bean , 把属性名拿过去,跟这些 Bean 的 id 逐个对比,如果有一个相同的,直接返回;如果没有任何相同的 id 与要注入的属性名相同,则会抛出 NoUniqueBeanDefinitionException 异常。

回调注入与延迟注入 回调注入

  回调注入的核心是一个叫Awarre接口。它来自springframework。
  常用的几个回调接口:

  简单使用,比如ApplicationContextAware的使用。我们类中只需要实现接口ApplicationContextAware。重写setApplicationContext方法即可。

public class AwaredTestBean implements ApplicationContextAware {
    
    private ApplicationContext ctx;
    
    @Override
    public void setApplicationContext(ApplicationContext ctx) throws BeansException {
        this.ctx = ctx;
    }
}

  上面代码的含义就是,当AwaredTestBean被初始化好的时候,就会把ApplicationContext传给它。

延迟注入

  只需要将注入的类型封装为ObjectProvider。

  @Autowired
    private ObjectProvider person;


  依赖注入的目的与优点:

  1. 依赖注入作为 IOC 的实现方式之一,目的就是解耦。
  2. 依赖注入的另一个特点是依赖对象的可配置。通过 xml 或者注解声明,可以指定和调整组件注入的对象,借助 Java 的多态特性,可以不需要大批量的修改就完成依赖注入的对象替换(面向接口编程与依赖注入配合近乎完美)。
BeanFactory 与 FactoryBean的区别

  BeanFactory:spring中实现IOC的最底层容器。从类的继承体系上看,它是最顶层的接口,也就是最顶层的容器实现。从类的组合结构上看,它则是最深层次的容器。
  FactoryBean:它是bean的一种类型,可以使用它来直接创建一些初始化流程比较复杂的对象。

Spring中的作用域

  为什么会出现不同的作用域?
  资源是有限的。如果一个资源允许同时被多个地方访问,那就可以把作用域提高。反正,如果一个资源伴随着一个时效性强的,带强状态的动作,那么这个作用域就应该局限于这一个动作,不能被这个动作之外的干扰。
  spring框架内置的作用域:

Spring框架干预bean的生命周期 spring框架初始化init-method,销毁方法destroy-method
  1. 在spring配置文件中,组件的配置有个属性init-method,可以配置要执行初始化的方法。destroy-method可以指定销毁方法。
  2. 在配置类中,有个注解@Bean中有个属性initMethod可以指定初始化方法。destroyMethod可以指定销毁方法。

  这两种方法都有以下特征:
  (1)方法的访问权限无要求。spring会通过反射获取。
  (2)方法无参数。
  (3)方法无返回值。
  (4)可以抛出异常。

InitializingBean和DisposableBean

  这两也是spring框架内部预先定义好的两个关于生命周期的额接口。
  实现InitializingBean接口,重写afterPropertiesSet方法,完成初始化。
  实现DisposableBean接口,重写destroy方法,完成销毁方法。

JSP规范中的初始化,销毁方法

  JSR规范中负责生命周期的注解,包括@PostConstruct 、@PreDestroy 两个注解,他们分别对应init-method和destroy-method。

三种方式的优先级

  当三种初始化方式都存在的时候,他们的执行顺序为:@PostConstruct → InitializingBean → init-method 。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/855146.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号