美文网首页
Spring IoC容器之类路径扫描及组件管理

Spring IoC容器之类路径扫描及组件管理

作者: 夏与清风 | 来源:发表于2019-07-14 15:55 被阅读0次

通过类扫描路径的方式来隐式检测候选组件,候选组件是匹配过滤条件的类库,并有在容器中注册对应bean的定义。开发者可以使用注解、AspectJ风格的表达式、自定义的过滤条件来选择哪些类有在容器中注册bean。

1、@Component及其同义的注解

spring2.5引入了更多典型注解,如@Component、@Repository、@Service、@Controller等。@Component注解是对受spring过滤组件的通用注解。@Repository、@Service、@Controller注解分别对应持久层、服务层和表现层。可以使用@Component注解自己的组件类,若使用@Repository、@Service、@Controller来替代,则这些类更适合由工具来处理或与切面进行关联。

2、元注解

元注解就是能被应用到另一个注解上的注解。

元注解可以被用于创建组合注解,如springMVC中的@RestController就是@Controller和@ResponseBody。组合注解可能从元注解中任意重新声明属性来允许用户自定义。如下是一个自定义的@Scope注解,将作用域名称指定到@Session注解上,也允许自定义proxyMode。

SessionScope定义 @SessionScope可以不声明proxyMode就使用   为proxyMode重载一个值

3、自动检测类并注册bean定义

spring可以自动检测类并在ApplicationContext中注册对应的BeanDefinition。示例如下:

要自动检测这些类并注册对应的bean,需要添加@ComponentScan到@Configuration类上,其中的base-package元素是这两个类的公共父类包,可以任意选择使用逗号、分号、空格分隔的列表将每个类引入父包。示例如下:

或者使用XML配置:

<context:component-scan>隐式的开启了<context:annotation-config>功能,因此无需再使用<context:annotation-config>。

4、使用过滤器来自定义扫描

默认情况下@Component、@Repository、@Service、@Controller注解,或使用进行自定义的@Component注解的类本身仅用于检测候选组件,开发者可以修改并扩展这种行为,只需应用自定义的过滤器,即在@ComponentScan注解中添加include-filter或exclude-filter参数即可。每个过滤器元素需要type和expression属性。

过滤器选项及描述 使用Stub库来代替Repository注解 使用XML方式来配置

JSR-330规范注解

JSR-330是Java依赖注入的标准规范,从spring3.0开始支持。

\bullet @Inject

@javax.inject.Inject可以代替@Autowired注解,和@Autowired一样,它可以在字段、方法或构造器参数级别使用,示例如下:

import javax.inject.Inject;

public class TestBean {

    private MessageServiceservice;

    @Inject

    public void setService(MessageService service) {this.service = service;}

}

\bullet @Named和@ManagedBean

@javax.inject.Named和javax.annotation.ManagedBean可以代替@Component。示例如下:

import javax.inject.Named;

import javax.inject.Inject;

@Named("testBean") //等同于@ManagedBean("testBean")

public class TestBean {

    private MessageServiceservice;

    @Inject

    public void setService(MessageService service) {this.service = service;}

}

当使用@javax.inject.Named和javax.annotation.ManagedBean注解时,可以与使用spring注解相同的方式使用组件扫描。

@Configuration

@ComponentScan(basePackages ="com.xlws")

public class AppConfig {}

--参考文献《Srping5开发大全》

相关文章

  • Spring IoC容器之类路径扫描及组件管理

    通过类扫描路径的方式来隐式检测候选组件,候选组件是匹配过滤条件的类库,并有在容器中注册对应bean的定义。开发者可...

  • Spring IoC容器和bean

    IoC容器是spring框架的核心组件,spring通过IoC容器来管理所有Java对象及其相互间的依赖关系。 依...

  • spring注解(常用)

    指定扫描路径后,并不是该路径下所有组件类都扫描,只有在组件类定义前面有以下注解标记时,才会扫描到spring容器 ...

  • Spring IoC容器初始化

    Spring IoC容器的初始化,主要分为三段 启动容器,扫描指定包路径下的Bean,封装BeanDefiniti...

  • 如何实现一个IOC容器

    如何实现一个IOC容器 配置文件配置包扫描路径 递归包扫描获取.class文件 反射、确定需要交给IOC管理的类 ...

  • Spring 实例化bean的方式

    Spring bean是由Spring IoC容器管理的对象。Spring IoC容器管理一个或多个bean,这些...

  • Spring 5 中文解析核心篇-IoC容器之类路径扫描和组件管

    1.10 类路径扫描和组件管理 本章中的大多数示例都使用XML来指定在Spring容器中生成每个BeanDefin...

  • spring-ioc 注解

    spring-ioc 注解使用 配置扫描路径 添加注解 @Component("user") 使用 Spring ...

  • AOP代理

    Spring中的AOP代理由Spring的IOC容器负责生成、管理,其依赖关系也由IOC容器负责管理。AOP代理可...

  • Bean 的后置处理器

    IOC 容器中 Bean 的生命周期方法: Spring IOC 容器可以管理Bean 的生命周期Spring 允...

网友评论

      本文标题:Spring IoC容器之类路径扫描及组件管理

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