美文网首页
Day01:Spring容器

Day01:Spring容器

作者: 宇宙超人喵学长 | 来源:发表于2017-07-21 15:39 被阅读0次

1、基本装配

1.0 属性注入和构造器注入的差异

  • 属性注入直白易懂,缺点是对于属性可选的时候,很多个构造函数会显得类很臃肿。
  • 构造注入是一种高内聚的体现,特别是针对有些属性需要在对象在创建时候赋值,且后续不允许修改(不提供setter方法)。

1.1

@Component注解:表明该类会作为组件类,spring为其创建bean,参数为id(也可使用@Named注解为bean设置ID)
@ComponentScan:默认不启用组件扫描,需要显示配置,默认扫描与配置类相同的包,参数为包的名称,

  • 可以设置基础包:@ComponentScan(basePackage={"soundsystem", "video"})
  • 可以指定包中含的类或接口:@ComponentScan(basePackageClassess={CDPlayer.class, DVDPlayer.class})

若使用xml启动组件扫描:<context:component-scan base-package="soundsystem" />

1.2

@Bean(destoryMethod="shutdown")
@Autowired:spring特有,可用@Inject替换,自动装配,可用在构造器或属性的Setter方法上,参数required=true时,没有匹配到bean会抛异常,

1.3 JavaConfig - 通过Java装配bean

  • 给类添加 @Configuration 注解
  • @Bean注解方法,创建所需实例,id与方法名一致,属性name可指定
  • 装配有依赖的bean:
    return new CDPlayer(sgtPeppers()); //sgtPeppers方法也被注解bean,需要在同一个配置类中
    public CDPlayer cdPlyaer(CompactDisc compactDisc) //自动装配CompactDisc到方法中,降低关联

1.4 XML装配bean

  • 创建xml文件,并以 <beans> 为根
  • <bean id='名字' class='类的全名' />
  • <constructor-arg ref="引用的bean的id"> 或者 c-命名空间模式 xmlns:c="http://www.springframework.org/schema/c" bean id="cdPlayer" class="" c:cd-ref="引用id" />
  • 使用 <constructor-arg> 元素进行构造器参数的注入 || 使用c:_title或者c:_0进行参数的注入

1.5 属性设置

对强依赖使用构造器注入
对可选性依赖使用属性注入
spring的p-命名空间替代<property>元素:xmlns:p="https://www.springframework.org/schema/p" p:compactDisc-ref="compactDisc //装配compactDisc属性

c-命名空间和p-命名空间:-ref后缀是装配bean,没有装配的就是字面量,不能使用p-空间装配集合,

1.6 组合配置

拆分config

  • @Import导入config
  • 创建更高级别的config,然后组合 @Import({a.class, b.class})
  • javaconfig加载xml
    @ImportResource("classpath:xx-config.xml")
  • xml中引用javaconfig
    <bean class="xx.config /> //使用xml配置 <bean id="player" class="com.player" c:cd-ref="comDisc" /> //使用java描述

2、高级装配

2.1 profile(环境)

  • profile决定哪个bean创建和不创建,没指定profile则始终都被创建
  • 给bean或方法配置@Profile("***")注解 || 在xml的头添加profile="***"
  • 需要配置激活哪个profile(dispatcherservlet的初始化参数、web应用的上下文参数、JNDI条目、环境变量、JVM系统属性、集成测试时用@ActiveProfiles注解)
  • 配置:spring.profiles.active || spring.profiles.active

3、条件化bean

@Conditional(MagicExistsCondition.class) //条件创建bean public class MagicExistsCondition implements Condition { public boolean matches { return true/false; } }

ConditionContext接口:

  • 检查bean的定义(getRegistry())
  • 检查bean是否存在(getBeanFactory())
  • 检查环境变量(getEnvironment())
  • 检查资源(getResourceLoader())
  • 检查类是否存在(getClassLoader())

AnnotatedTypeMetadate接口:检查带有@Bean注解的方法上还有什么其他的注解(isAnnotated())

3.1.1 自动装配有歧义时

  • 标示首选bean:@Component @Primary || @Bean @Primary || xml中primary="true"
  • 限定自动装配:@Qualifier("限定符_bean_id");
  • 可以给bean设置限定符:@Qualifier("***")

3.2 bean的作用域

在bean的类上使用@Scope注解,参数为ConfigurableBeanFactory.SCOPE_XXXXX

默认所有的bean:单例(singleton)模式

  • 单例singleton:整个应用一个bean实例
  • 原型prototype:每次注入或者通过spring上下文获取的时候都创建新实例
  • 会话session:每个会话
  • 请求request:每个请求

相关文章

  • Day01:Spring容器

    1、基本装配 1.0 属性注入和构造器注入的差异 属性注入直白易懂,缺点是对于属性可选的时候,很多个构造函数会显得...

  • Unit08 PPT: Spring简介 、 Spring容器

    Spring和MyBatis高级应用 Spring&MyBatis DAY01 Spring简介 什么是Sprin...

  • Spring原理简述

    一、什么是Spring容器? Spring容器,也称Spring Ioc容器或bean容器,是Spring框架的核...

  • Spring 学习笔记(二):Spring 容器以及 bean

    Spring 容器 在 Spring 应用中,应用对象生存于 Spring 容器中,Spring 容器负责创建对象...

  • 2.Spring IoC 容器

    1.Spring IoC 容器 IoC 容器 Spring 容器是 Spring 框架的核心。容器将创建对象,把它...

  • spring原理机制

    1,关于spring容器: Spring的核心是spring容器,该容器负责管理spring中的java组件。 A...

  • Spring入门笔记

    Spring入门使用Spring容器Spring容器使用ApplicationContextApplication...

  • spring 学习02

    Spring 容器 在Spring 应用中,你的应用对象生存在Spring容器中,Spring 容器负责创建对象,...

  • spring详解(一)

    一:spring的基本用法: 1.关于spring容器: spring容器是Spring的核心,该 容器负责管理s...

  • Spring之旅(二):Spring 容器

    Spring容器 Spring容器的作用是啥? Spring中的对象Bean生存在Spirng容器(contain...

网友评论

      本文标题:Day01:Spring容器

      本文链接:https://www.haomeiwen.com/subject/wzqekxtx.html