Spring实战之装配bean

Spring实战读书笔记

目录

Spring实战读书笔记

第二章:装配Bean

三种主要的装配机制:

自动化装配Bean步骤:

设置组件扫描的基础包:

使用@AutoWired注解

通过Java代码装配bean

通过XML装配bean


 

三种主要的装配机制:

  • 在XML中进行显示配置

  • 在Java中进行显示配置

  • 隐式的bean发现机制和自动装配

自动化装配Bean步骤:

  • 利用@Component注解配置可被显式发现的bean(@Named注解与@Component功能大致相同,不过@Named是Java定制的依赖注入规范,而@Component是Spring的规范)

  • 创建一个config类,使用@Configuration和@ComponentScan注解修饰,@ComponentScan会自动扫描当前包和它的子包下面的所有的@Component注解

  • 当然上一步也可以使用XML配置的方式实现<context:component-scan base-package="">。

设置组件扫描的基础包:

  • @ComponentScan注解内有basePackages属性,它是一个数组类型,可以设置多个组件扫描基础包。

  • 但是上面这种方法是不安全的,因为basePackages内要填入的是包的名字,是String类型,如果我们的代码发生了重构,包名发生了变化,它就找不到这个包了

  • @ComponentScan内还有一个basePackageClasses属性,在这个属性中设置多个类,这些类所在的包就会被设置为组件扫描的基础包。

使用@AutoWired注解

  • 实际上@AutoWired注解可以用在类的任意方法上,Spring会尝试满足方法参数上所声明的依赖,如果有bean符合要求,它就会被装配进来。如果没有匹配的bean,spring会抛出一个异常,我们也可以将@AutoWired的required属性设置为false,但这样可能会抛出一个NullPointerException。

  • 与@AutoWired相似的还有@Inject注解,它来源于Java依赖注入规范。而@AuroWired是Spring特定的注解。

通过Java代码装配bean

  • 使用@Bean注解声明简单的bean。也可以使用name属性指定一个名字。例:

   @Bean(name="aa")

    public A getA(){

    return new A();

    }

 

  • 利用Java代码实现注入,如下,将A对象作为参数,注入给要生成的B。(由于我们的getA()方法上面加了@Bean注解,所以即使我们生成多个B对象,它们的参数都是同一个):

@Bean

    public B getB(){

    return new B(getA());        //我们可以在方法内部为要生产的bean对象自由的注入,如下

    //B b=new B();

    //b.setA=getA();

    //return B;

    }

 

通过XML装配bean

说实话,使用xml装配,不仅麻烦而且繁琐,不建议使用这种方法

  • 通过<bean>标签实现bean的装配,<constructor-arg>或c-命名空间 实现构造器的注入,<property>或p-命名空间 实现属性的注入

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值