永发信息网

@Bean在@Configuration和在@Component中的区别

答案:2  悬赏:30  手机版
解决时间 2021-02-13 21:06
@Bean在@Configuration和在@Component中的区别
最佳答案
你好
关于@Bean在@Configuration和在@Component中的区别(源于spring官方文档,仅供参考与本站立场无关):
The @Bean methods in a Spring component are processed differently than their counterparts inside a Spring @Configuration class. The difference is that @Component classes are not enhanced with CGLIB to intercept the invocation of methods and fields. CGLIB proxying is the means by which invoking methods or fields within @Bean methods in @Configuration classes creates bean metadata references to collaborating objects; such methods are not invoked with normal Java semantics but rather Go through the Container in order to provide the usual lifecycle management and proxying of Spring beans even when referring to other beans via programmatic calls to @Bean methods. In contrast, invoking a method or field in an @Bean method within a plain @Component class has standard java semantics, with no special CGLIB processing or other constraints applying.
翻译:
在Component中(@Component标注的类,包括@Service,@Repository, @Controller)使用@Bean注解和在@Configuration中使用是不同的。在@Component类中使用方法或字段时不会使用CGLIB增强(及不使用代理类:调用任何方法,使用任何变量,拿到的是原始对象,后面会有例子解释)。而在@Configuration类中使用方法或字段时则使用CGLIB创造协作对象(及使用代理:拿到的是代理对象);当调用@Bean注解的方法时它不是普通的Java语义,而是从容器中拿到由Spring生命周期管理、被Spring代理甚至依赖于其他Bean的对象引用。在@Component中调用@Bean注解的方法和字段则是普通的Java语义,不经过CGLIB处理。
希望能帮到你
全部回答
spring 注解@component,@service,@controller,@repository spring 2.5 中除了提供 @component 注释外,还定义了几个拥有特殊语义的注释,它们分别是:@repository、@service 和 @controller。在目前的 spring 版本中,这 3 个注释和 @component 是等效的,但是从注释类的命名上,很容易看出这 3 个注释分别和持久层、业务层和控制层(web 层)相对应。虽然目前这 3 个注释和 @component 相比没有什么新意,但 spring 将在以后的版本中为它们添加特殊的功能。所以,如果 web 应用程序采用了经典的三层分层结构的话,最好在持久层、业务层和控制层分别采用 @repository、@service 和 @controller 对分层中的类进行注释,而用 @component 对那些比较中立的类进行注释。 在 一个稍大的项目中,通常会有上百个组件,如果这些组件采用xml的bean定义来配置,显然会增加配置文件的体积,查找以及维护起来也不太方便。 spring2.5为我们引入了组件自动扫描机制,他可以在类路径底下寻找标注了 @component,@service,@controller,@repository注解的类,并把这些类纳入进spring容器中管理。它的作用 和在xml文件中使用bean节点配置组件时一样的。要使用自动扫描机制,我们需要打开以下配置信息: java代码 1. 3. 4. 5. 6. @service public class ventorserviceimpl implements iventorservice { 7. } @repository public class ventordaoimpl implements iventordao { 8. } 9. } 10. @predestroy public void destory() { 11. } 注入方式: 把 dao实现类注入到service实现类中,把service的接口(注意不要是service的实现类)注入到action中,注入时不要new 这个注入的类,因为spring会自动注入,如果手动再new的话会出现错误,然后属性加上@autowired后不需要getter()和 setter()方法,spring也会自动注入。至于更具体的内容,等对注入的方式更加熟练后会做个完整的例子上来。 注解: 在 spring的配置文件里面只需要加上,可以使用base-package="*"表示全部的类。 其中base-package为需要扫描的包(含所有子包) 在接口前面标上@autowired和@qualifier注释使得接口可以被容器注入,当接口存在两个实现类的时候必须指定其中一个来注入,使用实现类首字母小写的字符串来注入,如: @autowired @qualifier("chinese") private man man; 使用autowired注入的步骤: 1.首先根据类型找到所有可以满足条件的bean 2.判断bean长度,如果没有,则根据@autowired中的required属性进行判断是否抛出异常(默认为true) 3.如果多于一个,则尝试寻找最优的那一个,如果最优的未找到,则抛出异常 4.如果只有一个,则直接使用此bean 否则可以省略,只写@autowired 。 @service服务层组件,用于标注业务层组件,表示定义一个bean,自动根据bean的类名实例化一个首写字母为小写的bean,例如chinese实例化为chinese,如果需要自己改名字则:@service("你自己改的bean名")。 @controller用于标注控制层组件(如struts中的action) @repository持久层组件,用于标注数据访问组件,即dao组件 @component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。 @service public class ventorserviceimpl implements iventorservice { } @repository public class ventordaoimpl implements iventordao { } getbean 的默认名称是类名(头字母小写),如果想自定义,可以@service(“aaaaa”) 这样来指定,这种 bean默认是单例的,如果想改变,可以使用@service(“beanname”) @scope(“prototype”)来改变。 可以使用以下方式指定初始化方法和销毁方法(方法名任意): @postconstruct public void init() { } @predestroy public void destory() { } 如果xml文件中配置了业务层的bean,则在业务实现层类上无需添加@service注解。同样如果配置了持久层的bean也就无需在dao实现层类上添加@repository
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
彩虹阁怎么去啊,有知道地址的么
Airbag是什么意思?
乒乓球上的ITTF 是什么意思?
世圣机电地址在哪,我要去那里办事
学生因病请假条怎么写
梅子是梅花结得果吗?
米脂公路管理段地址在什么地方,想过去办事
下边漫画中这位沉迷于网络的同学,如果不及时
求助 f(x)=sin(2x-pai/6)
老子为什么是"老"子
小车进气压力传感器故障有什么表现!,有车友
翟家庄这个地址在什么地方,我要处理点事
形容女孩文静句子,长发带,眼镜的,
莆田九中在那里?
可以用数学方法证明1+1=0吗?
推荐资讯
女人生孩子私部缝针处没长好怎么处理伤口
你好!楼房怎么区分东四宅、西四宅?
问凤岗那里有买火车票的?
以对闯黄灯罚款的看法为题的英语作文。。。急
X039/京开辅路(路口)怎么去啊,有知道地址的
木材工厂怎么管理工人
怎么把两张图片减切两不分合成一张图?
传祺1.8T正时皮带对准图有吗?
健康证怎么辨别真伪?
白兰地用醒酒器吗?四星张裕白兰地是否使用醒
老白家包子铺这个地址在什么地方,我要处理点
雕刻机主轴国产和进口的主轴有什么区别?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?