什么时候加component注解(componentbean区别)

@Component被用在要被自动扫描和装配的类(@AutoWired)上,今天小编就来说说关于什么时候加component注解?下面更多详细答案一起来看看吧!

什么时候加component注解(componentbean区别)

什么时候加component注解

第一种观点

@Component被用在要被自动扫描和装配的类(@AutoWired)上。

@bean主要被用在方法上,来显式声明要用生成的类。

现在项目上,本工程中的类,一般都使用@Component来生成bean。在把通过web service取得的类,生成Bean时,使用@Bean和getter方法来生成bean。

第二种观点

Spring帮助我们管理Bean分为两个部分,一个是注册Bean,一个装配Bean。

完成这两个动作有三种方式,一种是使用自动配置的方式、一种是使用JavaConfig的方式,一种就是使用XML配置的方式。

在自动配置的方式中,使用@Component去告诉Spring,我是一个bean,你要来管理我,然后使用@AutoWired注解去装配Bean(所谓装配,就是管理对象直接的协作关系)。然后在JavaConfig中,@Configuration其实就是告诉spring,spring容器要怎么配置(怎么去注册bean,怎么去处理bean之间的关系(装配))。那么久很好理解了,@Bean的意思就是,我要获取这个bean的时候,你spring要按照这种方式去帮我获取到这个bean。到了使用xml的方式,也是如此。君不见<bean>标签就是告诉spring怎么获取这个bean,各种<ref>就是手动的配置bean之间的关系。

用@Bean注解的方法:会实例化、配置并初始化一个新的对象,这个对象会由spring IoC 容器管理。

@Configuration

public class AppConfig {

@Bean

public MyService myService() {

return new MyServiceImpl();

}

}

相当于在 XML 文件中配置

<beans>

<bean id="myService" class="com.acme.services.MyServiceImpl"/>

</beans>

生成对象的名字:默认情况下用@Bean注解的方法名作为对象的名字。但是可以用 name属性定义对象的名字.

@Configuration

public class AppConfig {

@Bean(name = "myFoo")

public Foo foo() {

return new Foo();

}

}

第三种Spring中@Component与@Bean的区别

首先我们看看这两个注解的作用:

@Component注解表明一个类会作为组件类,并告知Spring要为这个类创建bean。

@Bean注解告诉Spring这个方法将会返回一个对象,这个对象要注册为Spring应用上下文中的bean。通常方法体中包含了最终产生bean实例的逻辑。

两者的目的是一样的,都是注册bean到Spring容器中。

@Component(@Controller、@Service、@Repository)通常是通过类路径扫描来自动侦测以及自动装配到Spring容器中。

而@Bean注解通常是我们在标有该注解的方法中定义产生这个bean的逻辑。

举个栗子:

@Controller

//在这里用Component,Controller,Service,Repository都可以起到相同的作用。

@RequestMapping(″/web/controller1″)

public class WebController {

.....

}

而@Bean的用途则更加灵活

当我们引用第三方库中的类需要装配到Spring容器时,则只能通过@Bean来实现

举个例子:

public class WireThirdLibClass {

@Bean

public ThirdLibClass getThirdLibClass() {

return new ThirdLibClass();

}

}

再举个只能用@Bean的例子:

@Bean

public OneService getService(status) {

case (status) {

when 1:

return new serviceImpl1();

when 2:

return new serviceImpl2();

when 3:

return new serviceImpl3();

}

}

以上这个例子是无法用Component以及其具体实现注解(Controller、Service、Repository)来实现的。

总结:@Component和@Bean都是用来注册Bean并装配到Spring容器中,但是Bean比Component的自定义性更强。可以实现一些Component实现不了的自定义加载类。

私信666领取资料

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页