[转载]Spring下IOC容器和DI(依赖注入) @Bean及@Autowired

时间:2022-03-04 02:11:08

Spring下IOC容器和DI(依赖注入) @Bean及@Autowired自动装配

bean是什么

bean在spring中可以理解为一个对象。理解这个对象需要换一种角度,即可将spring看做一门编程语言,@Bean是spring语言声明对象的标识。

spring启动过程中会自动扫描注解,当遇到能产生Bean的注解(见下方列表)后,会将注解的类自动实例化(自动扫描及实例化只进行一次),之后将这个类的实例放到spring框架的容器中,当需要使用时(自动装配)会从容器中调用这个实例。

调用加了注解的类A且该类A中也有自动装配的bean时,不能使用new A()的方式,否则A中自动装配的bean都会失效,需要使用 '@Autowired A a;'才行。

能产生Bean的注解有:

    @Component
@Repository
@Controller
@Service
@Configration
前五种只能对类使用。
@Bean (特殊,可对方法注解。@Bean注解需在上方五个注解的类中才生效,例如下:)

自动装配是什么?

创建应用对象之间协作关系的行为称为装配。也就是说当一个类A的属性中声明了另一个类B的对象,A实例化时,需要为A的属性B进行实例化。这就是装配。

自动转配会自动将对象属性实例化。

在A类中声明属性B时加上注解@Autowired,A实例化时spring会自动从容器中调动B的实例。为了让spring能从容器中调用B的实例,需在B的类声明上能产生Bean的注解。

自动装配的注解有:

@Autowired (通过类装配,一般用这个)

@Resource (通过自命名装配)

@Autowired自动装配有两种方式:
一种是重写set方法,可对对象自定义操