Spring注解

项目所分层次
1、Controller
@Controller 用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象。
分发处理器将会扫描使用了该注解的类的方法。通俗来说,被Controller标记的类就是一个控制器,
这个类中的方法,就是相应的动作。
@RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的
所有响应请求的方法都是以该 地址 作为父路径。


2、Service
@Service("userService")注解是告诉spring,当Spring要创建UserServiceImpl的的实例时,bean的
名字必须叫做"userService",当Action需要UserServiceImp1的实例时,由Spring创建好的“userService”
注入给Action。 用于类上 


3、Dao
@Repository(value="userDao")注解是告诉Spring,让Spring创建一个名字叫“userDao”的UserDaoImpl实例。
(用于类上)当 Service 需要使用Spring创建的名字叫“userDao”的UserDaoImpl实例时,就可以使用
@Resource(name = "userDao") 注解告诉Spring,Spring把创建好的userDao注入给Service即可。


@Repository(value="",params={ , },method={"",""},headers={})
例如:
1、:@RequestMapping (value= "testParams" , params={ "param1=value1" , "param2" , "!param3" })
    public String testParams() {} 
1.value
类上@RequestMapping(value = "user") 方法上(value = "tologin")跳转到登录页面的路径就
是localhost:8080/xxx-war/user/toLogin
2.params属性设置参数
分别表示参数param1 的值必须等于value1 ,参数param2 必须存在,值无所谓,参数param3 必须不存在,
只有当请求/testParams.do 并且满足指定的三个参数条件的时候才能访问到该方法。当请求
/testParams.do?param1=value1&param2=value2 的时候能够正确访问到该testParams 方法,
当请求/testParams.do?param1=value1&param2=value2&param3=value3 的时候就不能够正常的访问到该方法,
因为在@RequestMapping 的params 参数里面指定了参数param3 是不能存在的。
3、@RequestMapping (value= "testMethod" , method={RequestMethod. GET , RequestMethod. DELETE })
限制请求方式 必须是GET或者DELETE
4、@RequestMapping (value= "testHeaders" , headers={ "host=localhost" , "Accept" })
当请求/testHeaders.do 的时候只有当请求 头包 含Accept 信息,且请求的host 为localhost 的时候才能
正确的访问到testHeaders 方法。


@Autowired可以对成员变量、方法和构造函数进行标注,来完成自动装配的工作,我们也要清楚,@Autowired
是根据类型进行自动装配的。 用于成员变量、方法和构造函数 三者上


2、Mapper
@Component 把普通 类对象 实例化 到spring容器中,相当于配置文件中的<bean id="" class=""/>


总结
@Controller (注入服务)
@Service (注入Dao)
@repository dao(实现dao访问)   
@Component (添加bean==配置文件)


处理requet uri 部分(这里指uri template中variable,不含queryString部分)的注解@PathVariable;
public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model)
绑定它传过来的值到方法的参数上


处理request header部分的注解:@RequestHeader, @CookieValue;
1.如Header request部分
Host                    localhost:8080  
Accept                  text/html,application/xhtml+xml,application/xml;q=0.9  
Accept-Language         fr,en-gb;q=0.7,en;q=0.3  
Accept-Encoding         gzip,deflate  
Accept-Charset          ISO-8859-1,utf-8;q=0.7,*;q=0.7  
Keep-Alive              300  
public void displayHeaderInfo(@RequestHeader("Accept-Encoding") String encoding,  
 @RequestHeader("Keep-Alive") long keepAlive)
将header部分的值绑定到方法的参数上。
2.如Cookie值:
JSESSIONID=415A4AC178C59DACE0B2C9CA727CDD84  
参数绑定的代码:
public void displayHeaderInfo(@CookieValue("JSESSIONID") String cookie)
把Request header中关于cookie的值绑定到方法的参数上。



处理request body部分的注解:@RequestParam,  @RequestBody;
1.@RequestParam
常用来处理简单类型的绑定,通过Request.getParameter() 获取的String可直接转换为简单类型的情况
有两个属性value required;value用来指定要传入值的id名称,required用来指示参数是否必须绑定;

2.@RequestBody 用于读取Request请求的body部分,使用系统默认配置的HttpMessageConverter进行解析,
然后把相应的数据绑定到要返回的对象上;再把HttpMessageConverter返回的对象数据绑定到 controller
中方法的参数上;application/json, application/xml等。这些格式的数据,必须使用@RequestBody来处理
request的body部分的数据编码格式由header部分的Content-Type指定;

3.@ResponseBody该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为
指定格式后,写入到Response对象的body数据区。 使用时机:返回的数据格式是json.xml时使用


处理attribute类型是注解: @SessionAttributes, @ModelAttribute;
1.@SessionAttributes("pet")
该注解用来绑定HttpSession中的attribute对象的值,便于在方法中的参数里使用。
该注解有value、types两个属性,可以通过名字和类型指定要使用的attribute 对象
2.@ModelAttribute
该注解有两个用法,一个是用于方法上,一个是用于参数上;
用于方法上时: 通常用来在处理@RequestMapping之前,为请求绑定需要从后台查询的model;
用于参数上时: 用来通过名称对应,把相应名称的值绑定到注解的参数bean上;要绑定的值来源于:
(实际的效果就是在调用@RequestMapping的方法之前,为request对象的model里put(“account”, Account)
A @SessionAttributes 启用的attribute 对象上;
B @ModelAttribute 用于方法上时指定的model对象;
C上述两种情况都没有时,new一个需要绑定的bean对象,然后把request中按名称对应的方式把值绑定到bean中。


用@interface来自己定义注解              属性定义如下
例如:public @interface RequestParam{String hello() default "gege";}==>RequestParam即自己定义的注解


@Override重写方法,当方法名字出错时,编译器报错
@Deprecated,用来表示某个类的属性或方法已经过时,不想别人再用时,在属性和方法上用@Deprecated修饰
@SuppressWarnings用来压制程序中出来的警告,比如没有设置List<>参数或是方法已经过时的时候,不报错
@Retention注解有一个属性value,是RetentionPolicy类型的;用来修饰注解的.RetentionPolicy有3个值:
CLASS:注解信息保留在class文件,虚拟机在运行时不读取
RUNTIME:...虚拟机在运行时读取,从JVM中读取注解的信息,以便在分析程序的时候使用.
SOURCE:不保留
@Target也是用来修饰注解的元注解,它有一个属性ElementType也是枚举类型,
ANNOTATION_TYPE(注解类型) CONSTRUCTOR(构造方法上)  FIELD(域上) LOCAL_VARIABLE(局部变量) METHOD 
PACKAGE(java文件或包上) PARAMETER(参数上) TYPE(类或者接口上) 
@Target(ElementType.MOTHOD)只能修饰于方法上,修饰在类上会报错。
@Documented表明这个注解应该被javadoc工具记录. 默认情况下,javadoc是不包括注解的. 但如果声明注解时指
定了@Documented,则它会被javadoc(创建文档API)之类的工具处理, 所以注解类型信息也会被包括在生成的文档中.


网址:典型URL=》http://www.example.com/path/to/file?para1=foo&para2=bar#abc
/  相对路径
?路径与参数分隔符
& 参数之间的分隔符


@RunWith就是一个运行器
@RunWith(JUnit4.class)就是指用JUnit4来运行
@RunWith(SpringJUnit4ClassRunner.class),让测试运行于Spring测试环境
@RunWith(Suite.class)的话就是一套测试集合,
@Test @Before @After
使用Junit库需要在pom.xml里<dependencies></dependencies>中增加依赖,内容可在中央仓库中查找。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值