注解

https://blog.csdn.net/guozili1/article/details/60764532
@Component 标注一个普通的spring bean 类

@Controller 标注一个控制器组件类,它实现自动检测类路径下的组件并自动注册成bean,如果想自动检测生效,还需要在配置文件上加上以下:<content:component-base-packagecontent:component-base-package=”org.springframework.samples.petclinic.web”>

@Service   标注一个业务逻辑组件类

@Repository 标注一个DAO组件类
首先看一下不用注解时spring是怎么在xml文件上配置beans:
<bean id=”login” class=”com.agd.controller.login”>
<property name=”” ref=””>
</bean>
其中id是为beans取得名字,class是需要被变成bean的类的路径。
<property>是假如这个类需要执行setter方法的话所做的配置,一般来说就是当前这个类需要引用别的类,而别的类里有setter方法,name是指定执行哪一个setter方法,ref或value指定传入setter的参数。当传入参数是别的类(beans)时使用ref,为普通类型时使用value。

 

这是Spring提供的四种基础注解,假设有一个类放在com.zgd.controller的包下,名字为login,使用xml注解就需要在spring的配置文件上加上<bean id=”login” class=”com.agd.controller.login”><property name=”” value/ref=””></bean>
使用注解的话就可是省略这种配置,只需要在login类的前边加注解就可以了,还能根据不同的功能加上不同的注解,使之实现不同的bean配置。但是如果想让容器自动扫描带注解的类的话,我们需要给它设置好扫描路径,扫描路径就是类所在的包的路径,应该在spring的配置文件中加上<content :component-scan base-package=”com.zgd.controller”>
这样的代码。注解生成的bean是以类名为bean名的,当然也可以注解的时候指定,比如
@Component(“login”)
按我的理解,就是容器自己new了一个com.agd.controller.login对象吧。

 

 

@Resource:这个注解可以修饰一个对象(也就是一个bean)的set方法,也就是标注setter方法的参数,例如
@Resource(name=”aaa”)
这就是说这个对象的set方法的传入参数是另一个对象(bean)”aaa”.相当于<beans>下边<property>的ref属性<property name=”” ref=”aaa”>.也就是一个类被new之后需要传入参数的,new它的时候当然要写一个setter方法,spring实现这个就是使用的<property>进行设置,@Resource就是标志给setter方法传入的参数。
此外,我们更常用的是使用@Resource直接修饰对象实例变量,这样做即使对象中有setter方法,我们也不用写了。例如有一个类为Login,就可以直接这样写:
@Resource
Private Login l;
相当于给这个实例变量中的set方法传了一个bean参数 login。
@Resource修饰实例变量时可以省略name属性,当它省略时,默认与该实例变量同名。作用就是把和实例变量同名的beans
好像使用spring就能直接把对象当变量使了。

@Autowired: spring中用来实现自动装配,可以用来修饰setter方法,普通方法、实例方法及构造器等。使用@Autowired注解,可以使spring容器自动搜索符合需要的bean作为参数传进被注解的方法,或者作为变量实例的值赋给实例变量。
按对象实例变量为例,传统的写法是先new一个对象,然后为对象赋值,之后才是使用。使用spring之后是先定义成员变量,然后配置依赖注入,然后使用。使用@Autowired注解则是自动为定义的成员变量注入参数或值,然后使用。


@RequestMapping():为控制器类或者方法指定一个映射的路径,也就是说控制器类或者方法所对应的url,之后就可以通过@RequestMapping()注解指定的路径来访问到对应的类或方法。使用格式是:

@RequestMapping(value=”/login”)
一般来说,/后边的值保持和类或者方法同名,当然用别的名字也可以。@RequestMapping()还支持使用参数method限定被请求的方式,例如:
@RequestMapping(value="/getName", method = RequestMethod.GET)

此外,@RequestMapping还支持带占位符的URL,例如:
@RequestMapping(value=”/{userid}”)

当userid有值得时候生成完整的URL。Userid的值通过@PathVariable 注解方法进行绑定:
@RequestMapping(value=”/{userid}”)
Public void login(@PathVariable String userid,Model model){}

@RequestParam: 将请求中带的参数绑定到被注解标注的参数上去,使用方法:
Public void login(@RequestParam(value=”username” required=”true”) String username){}
这就表示把请求带过来的参数username赋值给方法中username这个参数。Required代表参数是否必须,可以不写,默认为true,当不能确定请求中存在value的值得这个参数的时候,就必须把设置required的值为false。


@RequestBody: 就是把请求报文中的请求体直接全部转换成java类型供在类和方法中使用。例如:
Public void login(@RequestBody String s){}
这就是把请求这个方法的请求的报文中的报文体自动转换一下绑定给方法的参数变量s。
@ResponseBody:将内容或对象转换一下作为响应报文的报文体返回去。一般返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用。

@Param:参数的解释,一般写在注释里面。

 

@Override: 重写,当子类继承了父类中的方法之后,想要重写其中的一些方法就可以使用这个注解。

 

@JoinTable:(出现在RoleEntity.java),表示java类和数据库表的映射
关系,相关还有列的映射主键的映射等,具体待研究。

 

@Transational: spring事务管理的注解,被注解的方法或类就自动被注册成事务接收spring容器的管理,具体使用请参考:
事务管理的认识与使用

 

@syschronized:实现java的同步机制。用了这个相当于加同步锁。具体使用待研究。

posted @ 2018-06-11 19:04  hsyooy  阅读(98)  评论(0编辑  收藏  举报