1.组建扫描
在类上添加注解@Component注解可以实现组建扫描
@Component public class A{ ... }
2.自动装配
通过在属性上或者方法上添加@Autowired注解可以实现自动装配(在单例bean,没有歧义的情况下)
public class B{ @Autowired private A a; ... }
public class B{
@Autowired
public B(A a){
...
} ... }
3.通过java代码实现显示装配
当使用第三方库时,无法实现自动装配,所以需要显示装配bean。在配置类中添加@Configuration注解,在方法上添加@Bean注解实现创建bean。
装配方式一: @Configuration public classs C{ @Bean public A getA(){ return new A(); } @Bean public B setA(){ return new B(getA()); } } 装配方式二: @Configuration public classs C{ @Bean public A getA(){ return new A(); } @Bean public B setA(A a){ return new B(a); } }
4、自动装配与歧义性
spring的默认模式是单例模式,只有单例模式时,才可以实现自动装配。为了处理歧义性,有以下几种方式:
假设有以下多个bean
@Compant public class Icecream extend Dessert{...} @Compant public class Cookie extend Dessert{...} @Compant public class Cake extend Dessert{...}
(1)标识首选Bean
利用@Primary注解
@Component @Primary public class Icecream extends Dessert{...}
(2)使用限定符表示不同的bean
@Autowired @Qualifier("icecream")//这里使用Icecream类,它的bean的名字默认为类的名字首字母小写,即“icecream” private Dessert dessert;
如果要使用自定义的bean的限定符:
定义: @Component @Qualifier("cold") public class Icecream extends Dessert{...} 使用: @Autowired @Qualifier("cold") private Dessert dessert;
5、bean的作用域
包含四种模式:
(1)单例模式:整个应用程序,只建立一个实例bean
(2)原型模式:每次注入或者通过spring上下文获取的时候,就建立一个实例bean
(3)会话模式:每个会话建立一个实例bean
(4)请求模式:每次请求建立一个实例bean
spring默认情况下,是单例模式,如果要用其他模式,可以用@Scope注解,并且配合@Component和@Bean使用。
@Component @Scope("prototype") public class A{ ... } @Bean @Scope("prototype") public A getA(){ ... }