component注解注解service和component的区别


component英[kəmˈpəʊnənt]美[kəmˈpoʊnənt]n.成分;组分;零件;[数]要素;adj.成分的;组成的;合成的;构成的;[例句]ponentofunorthodoxyintheircharacters.最优秀的领导往往来自于那些性格中有强烈叛逆成分的经理。[其他]复数

在spring中,不管是使用xml还是使用注解,实质上都是为spring容器提供bean的定义信息。而spring容器能够成功启动的三大重要因素是:Bean定义信息、Bean实现类、以及spring本身。如果采用XML配置Bean,那么Bean实现类和Bean定义信息是分离的,如果是用注解,那么Bean的定义信息和实现类都是在一起的,表现在Bean实现类的注解上。下面是一个简单的dao层的bean注解配置:在spring中,不管是使用xml还是使用注解,实质上都是为spring容器提供bean的定义信息。而spring容器能够成功启动的三大重要因素是:Bean定义信息、Bean实现类、以及spring本身。如果采用XML配置Bean,那么Bean实现类和Bean定义信息是分离的,如果是用注解,那么Bean的定义信息和实现类都是在一起的,表现在Bean实现类的注解上。下面是一个简单的dao层的bean注解配置:在UserDao中使用@Component注解对其进行标注,它会被Spring容器识别,然后自动转换成能被容器管理的Bean。它等效于一下的XML配置:除了@Component注解外,Spring还提供了3个功能和@Component基本等效的注解,它们分别用于对DAO、service、及web层的controller进行注解,也称这些注解为Bean的泛型注解。@Repository:用于对dao实现类进行标注。@Service:用于对service层实现类进行标注。@Controller:用于对web的控制层实现类进行标注。之所以在@Component注解之外又定义3个注解,是为了让注解类本身的用途清晰化。此外spring将赋予它们特殊的功能,所以推荐使用特别的注解标注特定的Bean.只是在Bean的实现类上添加上以上注解还是不够的,spring并不会自动扫描出这些带注解的类并将其转换成Bean,所以需要在spring的配置文件中配置spring需要扫描的包,使用下面的标签进行配置:自动装配Bean:@Repository("userDao")lassUserDao{@AutowiredprivatePersonInfopersonInfo;publicvoidprintPersonInfo(){System.out.println("personInfo:" personInfo.toString());}上面的personInfo对象是使用@Autowired注解进行注入。使用@Autowired注解进行bean属性的自动注入,等同于下面的XML配置:而且使用@Autowired注解不需要为要注入的属性对象提供setter和getter方法,@Autowired注解是按照类型进行装配的,在运行时spring查找容器中匹配的bean,当有且只有一个匹配的bean时,spring将其注入到由@Autowired配置的变量中。在使用@Autowired注解是可以结合@Qualifier注解一起使用,@Qualifier注解是用来指定注入Bean的名称,如果指定的名称在spring中不存在,spring容器会报错。@Repository("userDao")lassUserDao{@Autowired@Qualifier("personInfo")privatePersonInfopersonInfo;使用注解配置bean的作用范围:通过注解配置的bean和通过标签配置的Bean一样,默认的作用范围都是singleton,在使用注解配置scope的时候,spring提供的注解是@Scope,它可以显示指定bean的作用范围。@Scope("prototype")@Repository("userDao")lassUserDao{@Autowired@Qualifier("personInfo")privatePersonInfopersonInfo;上面的代码使用@Scope注解将bean的作用范围设置为prototype,这样每次spring容器都返回一个新的bean实例。在xml中配置bean时,可以设置bean的init-method属性和destroy-method属性来配置bean的初始化和销毁时执行的方法,spring支持java中提供的注解:@PostConstruct和@PreDestroy来设置初始化和销毁bean时的方法。@PostConstructpublicvoidinitMethod(){System.out.println("thisisinitmethod!");}@PreDestroypublicvoiddestroyMethod(){System.out.println("thisisdestroymethod.");}值得说明的是,当使用@PostConstruct和@PreDestroy注解配置Bean时,可以有多个对应的方法,spring在执行的时候也会把设置过这两个注解的所有方法都执行。

@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。(把普通pojo实例化到spring容器中,相当于配置文件中的

可以点进@service注解看一下,@service引用了ponent注解,也就