美文网首页
springboot Bean装配方式

springboot Bean装配方式

作者: _小咖喱黄不辣 | 来源:发表于2019-03-14 19:17 被阅读0次

一、模式注解与装配

用于声明类在应用中的角色。举例如下:

注解 说明
@Component 通用注解,声明一个普通bean
@Controller 声明web层角色
@Service 声明服务层角色
@Repository 声明dao层数据仓储角色
@Configuration 声明配置类

添加模式注解的类如何进行装配?有xml和注解两种方法:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    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/context
        http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    <!--注解支持-->
    <context:annotation-config />
    <!--扫描包范围-->
    <context:component-scan base-package="com.xx" />
</beans> 
@Configuration
@ComponentScan(basePackages = "com.xx")
public class springConfig {

}

二、@Enable模块装配

指一系列具有相同领域功能的组件集合。 举例如下:

模块注解 功能说明
@EnableWebMvc web mvc模块
@EnableTransactionManagement 事务管理模块
@EnableCaching 缓存模块
@EnableAsync 异步模块
@EnableMBeanExport JMX模块

@enable*注解如何使用,我们参考@EnableAsync源码实现看一下

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import({AsyncConfigurationSelector.class})
public @interface EnableAsync {
    中间代码......
}

public class AsyncConfigurationSelector extends AdviceModeImportSelector<EnableAsync> {
    private static final String ASYNC_EXECUTION_ASPECT_CONFIGURATION_CLASS_NAME = "org.springframework.scheduling.aspectj.AspectJAsyncConfiguration";
    public AsyncConfigurationSelector() {}
    public String[] selectImports(AdviceMode adviceMode) {
          中间代码......
    }
}

public abstract class AdviceModeImportSelector<A extends Annotation> implements ImportSelector {
    中间代码......
}

public interface ImportSelector {
    String[] selectImports(AnnotationMetadata var1);
}

通过以上代码得知,关键是通过实现ImportSelector接口来实现的。下面模仿源码自定义一个@Ebable模块。

public class Hello1 {
}
public class Hello2 {
}
public class EnableHello implements ImportSelector {
    @Override
    public String[] selectImports(AnnotationMetadata annotationMetadata) {
        return new String[]{Hello1.class.getName()};
    }
}
@SpringBootApplication
@Import(EnableHello.class)
public class DemoApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(DemoApplication.class, args);
        System.out.println(context.getBean(Hello1.class));
        System.out.println(context.getBean(Hello2.class));
    }
}
@EnableHello运行结果

相关文章

网友评论

      本文标题:springboot Bean装配方式

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