要使用
美文网首页
关于@Autowired和

关于@Autowired和

作者: 哈哈哈_d7ac | 来源:发表于2018-12-14 15:39 被阅读0次

    <context:component-scan base-package=" " />

    要使用<context:component-scan>标签,必须要有xmlns:context

    配置<context:component-scan base-package="" />扫描的包及其子包,只有当遇到了@Component @Controller@Service这些注解时spring才会注册对应的bean,配置扫描多个包,可以通过“,”逗号隔开:

    <context:component-scan base-package="com.test1,com.test2,com.test3" />

    另外<context:component-scan>有一个use-default-filters属性和两个子标签<context:include-filter>,<context:exclude-filter>。use-default-filters属性是使用默认过滤器,默认值为true,首先通过exclude-filter 进行黑名单过滤;然后通过include-filter 进行白名单过滤;否则默认选中扫描。(true则会对除了黑名单外进行扫描管理,false则不使用默认过滤器)。

    @Autowired

    在Spring 2.5 引入了 @Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 省去了set ,get方法。

    当spring容器中有bean之后,就能使用@autowired自动注入相对应的bean了,这是因为在启动spring IoC时,容器自动装载了一个AutowiredAnnotationBeanPostProcessor这样的bean,当这个bean扫描到@Autowied、@Resource或@Inject时,就会在IoC容器自动查找需要的bean,并装配给该注解标注的变量或方法及构造函数的参数。

    <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>

    也就是说,如果你不配置扫描也不写@Controller@Service这些注解时,你必须手动在spring配置文件中配置bean,才能使用@Autowied注入bean。

    此外在使用@Autowired时,首先在容器中查询对应类型的bean

        1.如果查询结果刚好为一个,就将该bean装配给@Autowired指定的变量。

        2.如果查询的结果不止一个,那么@Autowired会根据指定变量的名称来查找。也可以使用注解@Qualifier("bean的名称")来指定查找的bean。

        3.如果查询的结果为空,那么会抛出异常。解决方法时,使用required=false。

    当使用@Autowired注解的时候,其实默认就是@Autowired(required=true),表示注入的时候,该bean必须存在,否则就会注入失败。

    @Autowired(required=false):表示忽略当前要注入的bean,如果有直接注入,没有跳过,程序不会报错。

    相关文章

      网友评论

          本文标题:关于@Autowired和

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