@bean注解和@component注解的区别_spring中基于Java容器配置注解的区别及使用场景...

@Component、@Service、@Controller、@Repository;@Configuration、@Bean区别,使用场景

d5b86a9a67a861b37070711c6c29c798.png

从spring3.0开始,基于javaconfig的项目,支持使用java来定义bean,而不是传统的xml文件。@Component是一个通用的stereotype,可以用于任何受容器管理的bean。而@Service、@Controller、@Repository是用于特殊形式的@Component,注解在类型上,但本质是一样的。

在@Configuration中配合@ComponentScan使用,spring 自动检测stereotype类,然后在application context注册相应的bean definition。在运行时会生成CGLIB的子类,在调用父类方法前,子类会先查找缓存。从spring3.2开始,CGLIB已经被包含在spring中。

CGLIB的限制:

1、@Configuration注解的类不能是final;

2、从4.3开始,任何构造函数都允许在配置类上使用,包括使用@Autowired或用于默认注入的单个非默认构造函数声明。

3、若不想要CGLIB对bean的限制,则可以使用@Component作为配置类,跨方法的调用不会被拦截,因此你必须使用构造函数或方法级别的依赖注入。

@Bean注解在方法上,用于实现工厂方法。与@Configuration搭配使用,不同的方法(只new一次)代表相同的实例,可以用于内部bean的依赖只需要调用另一个bean相应的方法;而与@Component搭配使用,不同的方法(只new一次)代表不同的实例,即不能用于内部bean的依赖。

若是第三方服务想由spring容器管理,则需要使用@Bean注解提供工厂方法。若是自己的服务则可以注解@Component(@Service、@Controller、@Repository),由容器自动扫描。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值