Spring中常用注解的区别和作用

总是容易搞晕的几个注释,项目中总是做过了忘,还是要总结一下。

以下内容摘自:

http://blog.csdn.net/ye1992/article/details/19971467

@Repository、@Service、@Controller 和 @Component 将类标识为Bean。为什么需要四个注释:

在一个稍大的项目中,通常会有上百个组件,如果这些组件采用xmlbean定义来配置,显然会增加配置文件的体积,查找以及维护起来也不太方便。 Spring2.5为我们引入了组件自动扫描机制,他可以在类路径底下寻找标注了@Component,@Service,@Controller,@Repository注解的类,并把这些类纳入进spring容器中管理。它的作用和在xml文件中使用bean节点配置组件时一样的。

@Component 是一个泛化的概念,仅仅表示一个组件 (Bean) ,可以作用在任何层次。
@Service 通常作用在业务层,但是目前该功能与 @Component 相同。
@Constroller 通常作用在控制层,但是目前该功能与 @Component 相同。

通过在类上使用 @Repository、@Component、@Service 和 @Constroller 注解,Spring会自动创建相应的 BeanDefinition 对象,并注册到 ApplicationContext 中。这些类就成了 Spring受管组件。这三个注解除了作用于不同软件层次的类,其使用方式与 @Repository 是完全相同的。

------------------------------------------------------------------------------------------------

引用到这里就结束了,简单理解一下,注释的根本作用是简化配置过程,在复杂的项目中不用再写大量的<bean>而改用注释标注的方式让程序自己去扫描,按照持久层、业务层(服务层)、控制层(controller)的区分使用不同的注释名称,但效果是一样的,都是注册bean。getBean 的默认名称是类名(头字母小写,例如类名是TestGoHome,则按照名称实例化的bean名称就是testGoHome),如果想自定义,可以@Service(“aaaaa”)这样来指定,这种 bean默认是单例的,如果想改变,可以使用@Service(“beanName”)@Scope(“prototype”)来改变。 但是使用注册,就要配置自动扫描,方法就是在配置XML里面加入配置下面是很久以前自己的hsf-demo的配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context" xmlns:hsf="http://www.taobao.com/hsf"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.taobao.com/hsf http://www.taobao.com/hsf/hsf.xsd">



    <!--配置包解析配置-->
    <context:component-scan base-package="ld.test.itemcenter"/>    <!--主要看这句,其他都没用-->
    <!--配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

    <bean id="itemService" class="ld.test.itemcenter.ItemServiceImpl" />

    <!-- 提供一个服务示例 -->
    <hsf:provider id="itemServiceProvider" interface="ld.test.itemcenterapi.ItemService"
                  ref="itemService" version="1.0.0" group="testHSFGroup">
    </hsf:provider>

</beans>


再说@Autowried和@Resource

Spring 2.5 引入了 @Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired的使用来消除 set ,get方法。如果想使用自动注入,则要在配置文件里加入

 <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/> 
@Autowired 默认是按照byType进行注入的,但是当byType方式找到了多个符合的bean,又会按照ByName的方式注入,如果还有多个NAME那就只好报错了,可以直接手动指定按照某个名称来注入:

 @Autowired ()
 @Qualifier ( "carProvider" )
@Resource与@Autowired功能类似,但是他是按照name的方式注入的,另外@Resource 是属于 J2EE 的,减少了与 spring 的耦合。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值