学习spring常用的注解

学习spring常用的注解以及详解

1.@Controller :控制器controller负责处理由DispatcherServlet分发的请求,他把用户请求的数据经过处理层处理之后封装成一个model,然后再把该model返回给对应的view进行展示。@Controller 只是定义了一个控制器类,而使用@RequestMapping 注解的方法才是真正处理请求的处理器。单单使用@Controller 标记在一个类上还不能真正意义上的说它就是SpringMVC 的一个控制器类,因为这个时候Spring 还不认识它。
2.@RequestMapping用于处理请求地址映射的注解,可用于类和方法上。用于类上表示类中的所有响应请求都是以该地址作为父路径。

2.1、value, method;
value: 指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说	明);
method: 指定请求的method类型, GET、POST、PUT、DELETE等;

2.2、consumes,produces
consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
2.3、params,headers
params: 指定request中必须包含某些参数值是,才让该方法处理。
headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。

3.@Resource和@Autowired
@Resource 和 @Autowired都是做bean的注入时才使用,其实@Resource并不是spring的注解,它的包是javax.annotation.Resource,需要导入,但是spring支持该注解的注入

3.1共同点:两者都是写在字段和setter方法上。两者如果都写在字段上,那么就不需要setter方法。
3.2不同点:

它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired的使用来消除 set ,get方法。
	1.@Autowired。@Autowired为Spring提供的注解,需要导入包	org.springframework.beans.factory.annotation.Autowired;只按照byType注入。
	```
	public class TestServiceImpl {
 // 下面两种@Autowired只要使用一种即可
 @Autowired
 private UserDao userDao; // 用于字段上

  @Autowired
   public void setUserDao(UserDao userDao) { // 用于属性的方法上
 	   this.userDao = userDao;
	}
}
@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用。如下:
	public class TestServiceImpl {
  @Autowired
  @Qualifier("userDao")
 private UserDao userDao; 
}

@Autowired注解可用于为类的属性、构造器、方法进行注值。默认情况下,其依赖的对象必须存在(bean可用)如果容器中包含多个同一类型的Bean,那么启动容器时会报找不到指定类型bean的异常,解决办法是结合@Qualifier注解进行限定,指定注入的bean名称
@Resource
@Resource默认按照ByName自动注入,由J2EE提供,需要导入包javax.annotation.Resource。@Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略。

public class TestServiceImpl {
    // 下面两种@Resource只要使用一种即可
    @Resource(name="userDao")
    private UserDao userDao; // 用于字段上

    @Resource(name="userDao")
    public void setUserDao(UserDao userDao) { // 用于属性的setter方法上
        this.userDao = userDao;
    }
}

@Resource依赖注入时查找bean的规则

既不指定name属性,也不指定type属性,则自动按byName方式进行查找。如果没有找到符合的bean,则回退为一个原始类型进行进行查找,如果找到就注入。
只是指定了@Resource注解的name,则按name后的名字去bean元素里查找有与之相等的name属性的bean。
只指定@Resource注解的type属性,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
既指定了@Resource的name属性又指定了type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
4.@ModelAttribute和@SessionAttributes
代表的是:该Controller的所有方法在调用前,先执行此@ModelAttribute方法,可用于注解和方法参数中,可以把这个@ModelAttribute特性,应用在BaseController当中,所有的Controller继承BaseController,即可实现在调用Controller时,先执行@ModelAttribute方法。
@SessionAttributes即将值放到session作用域中,写在class上面。

5.@PathVariable
用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数。
6.@requestParam
@requestParam主要用于SpringMVC后台控制层获取参数,类似一种是request.getParameter(“name”),他有三个常用参数:defaultValue=‘0’,required=false,value=“isApp”;
defaultValue 表示设置默认值,required 通过boolean设置是否是必须要传入的参数,value 值表示接受的传入的参数类型。
7.@ResponseBody
作用:该注解用于将Controller的方法返回地对象,通过适当的HttpMessageConverter转换为指定格式后,写入到response对象的body数据区。
使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用。
8.@Component
把普通pojo实例化到spring容器中,相当于配置文件中的 <bean id=“ ” class=" "/>泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类
9.@Respository
用于标注数据访问组件,即DAO组件,再稍微大点的项目里,使用xml的bean定义来配置会大大增加代码体积且不易维护,所以引入了自动扫描的机制,它的作用和在xml文件中使用bean节点配置组件时一样的。用于注解dao层,再impl类上注解
10.@Bean注解
@Bean 标识一个用于配置和初始化一个由spring ioc容器管理的新对象的方法,类似于xml配置的,一般与@Configration注解配合使用
11.@Service
@Service对应的是业务层的bean,例如:


 @Service("userService")
 public class UserServiceImpl implements UserService {
 ………
 }

@Service(“userService”)注解是告诉spring,当spring要创建UserServiceImpl的实例化时候,bean的名字 必须叫 ‘userService’,这样当Action需要使用,UserServiceImpl时候,就可以由spring创建好的‘userService’,然后注入给Action;在Action中,只需要声明一个名字叫‘userService’的变量来接收由Spring注入的‘userService’即可,代码如下:

 // 注入userService
 @Resource(name = "userService")
 private UserService userService;

注意:在Action中声明的"userService"变量的类型必须是UserService或者实现类,否则的话;类型不一致无法注入,由于Action中使用了@Resource注解,声明了其name是"userService",这就相当于告诉spring,你需要帮我去实例化UserService,并且当spring看到@Resource注解的时候,根据其指明的name属性就知道,Action需要用到一个"UserServiceImpl的实例,此时spring就会创建一个实例,名字叫"userService",注入给Action中的userService变量,帮助Action完成"userService实例化。
这样Action就不用通过“UserService userService = new UserServiceImpl();”来创建实例,使用了spring之后,Action要使用UserServiceImpl时候就由spring来创建实例,spring把创建好的UserServiceImpl实例给Action,Action拿到就可以用了。Action由原来主动new 实例化转变为被动等待由spring创建好UserServiceImpl实例之后注入给Action,Action拿到就可以用了。这就叫做控制反转吧!!!也叫依赖注入。
“依赖注入”也很好理解,Action需要使用UserServiceImpl干活,那么就是对UserServiceImpl产生了依赖,Spring把Acion需要依赖的UserServiceImpl注入(也就是“给”)给Action,这就是所谓的“依赖注入”。对Action而言,Action依赖什么东西,就请求Spring注入给他,对Spring而言,Action需要什么,Spring就主动注入给他。
12.@Configration注解
@Configration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器
13.@ComponentScan
@ComponentScan告诉Spring 哪个packages 的用注解标识的类 会被spring自动扫描并且装入bean容器。

例如,如果你有个类用@Controller注解标识了,那么,如果不加上@ComponentScan,自动扫描该controller,那么该Controller就不会被spring扫描到,更不会装入spring容器中,因此你配置的这个Controller也没有意义。
14.@ImportResource注解和@Import注解
@Import注解是引入带有@Configuration的java类。

@ImportResource是引入spring配置文件.xml
15. @Repository
@Repository对应数据访问层Bean,例如

 @Repository(value="userDao")
 public class UserDaoImpl extends BaseDaoImpl<User> {
 ………
 }

当Service需要使用Spring创建的名字叫“userDao”的UserDaoImpl实例时,就可以使用@Resource(name = “userDao”)注解告诉Spring,Spring把创建好的userDao注入给Service即可。
// 注入userDao,从数据库中根据用户Id取出指定用户时需要用到
@Resource(name = “userDao”)
private BaseDao userDao;
在这里插入图片描述

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值