我们在开发的时候,会看到各种的注解,如果不细细研究下,傻傻的分不清楚,更谈不上怎么合理的利用了,接下来我们一起看下。
研究顺序,从最常用的来,follow me
1.@Controller注解
用于标注控制层组件(如struts中的action)。
如果@Controller不指定其value【@Controller】,则默认的bean名字为这个类的类名首字母小写,如果指定value【@Controller(value="UserAction")】或者【@Controller("UserAction")】,则使用value作为bean的名字。
2.@Resource
默认按照byName方式进行bean匹配,当找不到与名称匹配的bean才会按类型装配,由J2EE提供,需要导入包javax.annotation.Resource,@Resource的作用相当于@Autowired,只不过@Autowired按照byType自动注入。
(1)、@Resource后面没有任何内容,默认通过name属性去匹配bean,找不到再按type去匹配
(2)、指定了name或者type则根据指定的类型去匹配bean
(3)、指定了name和type则根据指定的name和type去匹配bean,任何一个不匹配都将报错
3.@Service注解
用于标注业务层组件。
@Service(“userService”)注解是告诉Spring,当Spring要创建UserServiceImpl的的实例时,bean的名字必须叫做”userService”,这样当Action需要使用UserServiceImpl的的实例时,就可以由Spring创建好的”userService”,然后注入给Action:在Action只需要声明一个名字叫“userService”的变量来接收由Spring注入的”userService”即可。
4.@Autowired注解
@Autowired顾名思义,就是自动装配,其作用是为了消除代码Java代码里面的getter/setter与bean属性中的property。当然,getter看个人需求,如果私有属性需要对外提供的话,应当予以保留。
@Autowired默认按类型(byType)匹配的方式,在容器查找匹配的Bean,当有且仅有一个匹配的Bean时,Spring将其注入@Autowired标注的变量中,如果我们想使用按名称装配,可以结合@Qualifier注解一起使用。
5.@RequestMapping 注解
是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
6.@requestParam注解
主要用于在SpringMVC后台控制层获取参数,类似一种是request.getParameter("name"),它有三个常用参数:defaultValue = "0", required = false, value = "isApp";defaultValue 表示设置默认值,required 铜过boolean设置是否是必须要传入的参数,value 值表示接受的传入的参数类型。
(1)、常用来处理简单类型的绑定,通过Request.getParameter() 获取的String可直接转换为简单类型的情况( String–> 简单类型的转换操作由ConversionService配置的转换器来完成);因为使用request.getParameter()方式获取参数,所以可以处理get 方式中queryString的值,也可以处理post方式中 body data的值;
(2)、用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容,提交方式GET、POST;
(3)、该注解有两个属性: value、required; value用来指定要传入值的id名称,required用来指示参数是否必须绑定;
7.@RequestBody注解
该注解常用来处理Content-Type: 不是application/x-www-form-urlencoded编码的内容,例如application/json, application/xml等;
它是通过使用HandlerAdapter 配置的HttpMessageConverters来解析post data body,然后绑定到相应的bean上的。
8.@ResponseBody注解
将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据。
9.@Component注解
泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
是所有受Spring 管理组件的通用形式,@Component注解可以放在类的头上,@Component不推荐使用。
@Component、@Repository、@Service、@Controller实质上属于同一类注解,用法相同,功能相同,区别在于标识组件的类型。@Component可以代替@Repository、@Service、@Controller,因为这三个注解是被@Component标注的。代码如下
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {
String value() default "";
}
10.@Configration注解
把一个类作为一个IoC容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean。
@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。
需要注意的是:
(1)、@Configuration不可以是final类型;
(2)、@Configuration不可以是匿名类;
(3)、嵌套的configuration必须是静态类。
Bean注解主要用于方法上,有点类似于工厂方法,当使用了@Bean注解,我们可以连续使用多种定义bean时用到的注解,譬如用@Qualifier注解定义工厂方法的名称,用@Scope注解定义该bean的作用域范围,譬如是singleton还是prototype等。
11.@Bean注解
@Bean是一个方法级别上的注解,主要用在@Configuration注解的类里,也可以用在@Component注解的类里。添加的bean的id为方法名。
@Bean 用在方法上,告诉Spring容器,你可以从下面这个方法中拿到一个Bean。
12.@Repository注解
用于标注数据访问组件,即DAO组件,@Repository(value=”userDao”)注解是告诉Spring,让Spring创建一个名字叫“userDao”的UserDaoImpl实例。
13.@Transactional注解
声明这service所有方法都需要事务管理。每一个业务方法开始时都会打开一个事务。
14.@Qualifier注解
如果容器中有一个以上匹配的Bean,则可以通过@Qualifier注解限定Bean的名称。
15.@Override注解
表示当前方法覆盖了父类的方法。
16.@Deprecated注解
表示方法已经过时,是不被建议使用的,方法上有横线,使用时会有警告。
17.@Suppvisewarnings注解
表示关闭一些警告信息(通知java编译器忽略特定的编译警告)。
18.@Scope注解
指定scope作用域的(用在类上),@Scope("prototype")表示将Action的范围声明为原型,可以利用容器的scope="prototype"来保证每一个请求有一个单独的Action来处理,避免struts中Action的线程安全问题。spring 默认scope 是单例模式(scope="singleton"),这样只会创建一个Action对象,每次访问都是同一Action对象,数据不安全,struts2 是要求每次次访问都对应不同的Action,scope="prototype" 可以保证当有请求的时候都创建一个Action对象。
19.@Lazy(true)注解
表示延迟初始化。
补充:
(1)、@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作。
(2)、被注解的java类当做Bean实例,Bean实例的名称默认是Bean类的首字母小写,其他部分不变。
(3)、尽量使用对应组件注解的类替换@Component注解,在spring未来的版本中,@Controller,@Service,@Repository会携带更多语义。
参考:
各位大侠高见以及自己的拙见