@Controller用于标识控制层主键,负责注册一个bean到spring上下文,bean的ID默认为首字母小写的类名称,用户也可以自定义。
例如:
方式一: @Controller
public class DemoController{}
方式二:@Controller("demoController")
public class DemoController{}
@RequestMapping 用来定义访问的URL,可以作用在类和方法上。
添加在类上,表示为整个类定义一个访问的URL;
添加在方法上,表示为此方法定义一个访问的URL;
例如:
方式一:@RequestMapping("/demo)
public class DemoController {} 表示对该类的所有访问路径都在/test下面。
方式二:@RequestMapping(value = "list", method = RequestMethod.GET)
public String list() {}表示对该方法的访问路径都在/list下面。
@Service用于标识业务层组件,getBean默认名称是首字母小写的类名,也可以自定义,如@Service("testService"),这种bean默认是单例的。
@Repository用于标识数据访问组件,配置此注解之前必须要在spring的配置文件中启用bean的自动扫描功能<context:component-scan/>。
Spring 在容器初始化时将自动扫描 base-package 指定的包及其子包下的所有 class文件,所有标注了 @Repository 的类都将被注册为 Spring Bean。
为什么 @Repository 只能标注在 DAO 类上呢?这是因为该注解的作用不只是将类识别为Bean,同时它还能将所标注的类中抛出的数据访问异常封装为 Spring 的数据访问异常类型。 Spring本身提供了一个丰富的并且是与具体的数据访问技术无关的数据访问异常结构,用于封装不同的持久层框架抛出的异常,使得异常独立于底层的框架。
@Autowired 用于对类成员、方法和构造函数进行标识,完成自动装配的工作,通过@Autowired注解可以消除set和get方法。前提是需要导入以下的bean配置才行:
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
@Resource默认按byName自动注入,是J2EE提供的。
二者的区别:
(1).@Autowired 与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上;
(2).@Autowired 默认按类型装配,默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如: @Autowired(required=false) .