Spring实战读书笔记
目录
三种主要的装配机制:
-
在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-命名空间 实现属性的注入