总是容易搞晕的几个注释,项目中总是做过了忘,还是要总结一下。
以下内容摘自:
@Repository、@Service、@Controller 和 @Component 将类标识为Bean。为什么需要四个注释:
在一个稍大的项目中,通常会有上百个组件,如果这些组件采用xml的bean定义来配置,显然会增加配置文件的体积,查找以及维护起来也不太方便。 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
的耦合。