zoukankan      html  css  js  c++  java
  • spring 装配

    spring 3种装配方式:

    支持混合配置:不管使用JavaConfig还是使用XML进行装配,通常都会创建一个根配置(root configuration),

    这个配置会将两个或更多的装配类和/或XML文件组合起来,在根配置中启用组件扫描(通过<context:component-scan>或@ComponentScan)

    (1)xml

     简单:<bean id="", class="">

             <constractor-arg ref/value>       

    </bean>

    (2)javaconfig

    进行显式配置时,JavaConfig是更好的方案,因为它更为强大、类型安全并且对重构友好

     @Configuration注解表明这个类是一个配置类

    @Bean(name="", destrodyMethod) 注解会告诉Spring这个方法将会返回一个对象,该对象要注册为Spring应用上下文中的bean, 默认情况下,bean的ID与带有@Bean注解的方法名是一样的

    (3)自动装配 扫描,并进行自动注入

    想要将第三方库中的组件装配到你的应用中,在这种情况下,是没有办法在它的类上添加@Component和@Autowired注解的,因此就不能使用自动化装配的方案了

    @Component(beanid, 默认就是将类名的第一个字母变为小写) 注解。这个简单的注解表明该类会作为组件类,并告知Spring要为这个类创建bean

    Spring支持将@Named作为@Component注解的替代方案

    组件扫描默认是不启用的。我们还需要显式配置一下Spring,从而命令它去寻找带有@Component注解的类,并为其创建bean.

    @ComponentScan(basePackages={"a", "b"}) 会启用自动扫描,果没有其他配置的话,@ComponentScan默认会扫描与配置类相同的包

    @ComponentScan(basePackageClasses={A.class, B.class}) 这样更好,利于重构代码,就是将其指定为包中所包含的类或接口. 在包中创建一个用来进行扫描的空标记接口(marker interface)。

    通过标记接口的方式,你依然能够保持对重构友好的接口引用,但是可以避免引用任何实际的应用程序代码

    xml 配置:<context:component-scan base-pacage="">

    javaconfig配置: 

    @Configuration

    @ComponentScan

    自动装配

    就是让Spring自动满足bean依赖的一种方法,在满足依赖的过程中,会在Spring应用上下文中寻找匹配某个bean需求的其他bean

    @Autowired(required=true) 可以用在类的任何方法上. 如果没有匹配的bean,那么在应用上下文创建的时候,Spring会抛出一个异常。

    为了避免异常的出现,你可以将@Autowired的required属性设置为false

    将required属性设置为false时,Spring会尝试执行自动装配,但是如果没有匹配的bean的话,Spring将会让这个bean处于未装配的状态。但是,把required属性设置为false时,你需要谨慎对待。如果在你的代码中没有进行null检查的话,这个处于未装配状态的属性有可能会出现NullPointerException。如果有多个bean都能满足依赖关系的话,Spring将会抛出一个异常,表明没有明确指定要选择哪个bean进行自动装配

     Spring同时支持@Inject和@Autowired

    (4) 混合配置

    javaconfig 引用另外一个javaconfig

    javaconfig 引用xml

    xml引用javaconfig 和xml 

  • 相关阅读:
    匈牙利算法-二分图的最大匹配
    UOJ 407(IOI2018 D1T3)
    UOJ 460
    UOJ 405(IOI2018 D1T1)
    Codeforces 1110E
    2.文件结构
    1.常用快捷键
    Python3.x和Python2.x的差异
    javascript 常用内置对象
    94. Binary Tree Inorder Traversal(非递归实现二叉树的中序遍历)
  • 原文地址:https://www.cnblogs.com/tulianghui/p/7170955.html
Copyright © 2011-2022 走看看