java常用的注解

来源:互联网 发布:铝合金和塑钢知乎 编辑:程序博客网 时间:2024/05/29 15:46

传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop、事务,这么做有两个缺点:

1、如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大;如果按需求分开.xml文件,那么.xml文件又会非常多。总之这将导致配置文件的可读性与可维护性变得很低

2、在开发中在.java文件和.xml文件之间不断切换,是一件麻烦的事,同时这种思维上的不连贯也会降低开发的效率

为了解决这两个问题,Spring引入了注解,通过"@XXX"的方式,让注解与Java Bean紧密结合,既大大减少了配置文件的体积,又增加了Java Bean的可读性与内聚性。

1.@Controller注解标记在类上,使用它标记的类就是一个SpringMVC Controller 对象。分发处理器将会扫描使用了该注解的类的方法。通俗来说,被Controller标记的类是一个控制器。

2.@RestController和@Controller的区别,其实@RestController的作用相当于@Controller注解和@ResponseBody注解的同时使用,倘若我们使用@RestController注解Controller时,则controller中的方法无法返回jsp页面,配置的视图解析器不起作用。当返回的是对象的时候,需要通过适应的HttpMessageContext转化为指定格式后,写入到Response对象的Body的数据区中进行返回

3.@RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。用于方法上,表示方法的响应请求是已该地址作为具体的路径。还可以设置post请求或get请求。

4.@GetMapping是一个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写。该注解将HTTP Get 映射到 特定的处理方法上。

5.@PostMapping是一个组合注解,是@RequestMapping(method = RequestMethod.Post)的缩写。该注解将HTTP Post 映射到 特定的处理方法上。

6.@RequestParam注解用于将请求参数映射到controller方法的参数上,顾名思义,是从请求中获取参数。value:参数名字,即入参的请求参数名字。required:是否必须,默认是true,表示请求中一定要有相应的参数,否则将报404错误码;defaultValue:默认值,表示如果请求中没有同名参数时的默认值。

7.@PathVariable注解可以将 URL 中占位符参数绑定到controller方法的入参中:URL 中的 {xxx} 占位符可以通过@PathVariable("xxx") 绑定到操作方法的入参中。顾名思义,是从路径里面去获取变量,也就是变量是路径的部分。

8.@Value需要参数,这里参数可以是两种形式:@Value("#{configProperties['upload.url']}")或者@Value("${upload.url}")

①@Value("#{configProperties['upload.url']}")这种形式的配置中有“configProperties”,其实它指定的是配置文件的加载对象:配置如下:

 <bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">        <property name="locations">               <list>        <value>classpath:/config/custom.properties</value>     </list>   </property>  </bean>
②@Value("${upload.url}")这种形式不需要指定具体加载对象,这时候需要一个关键的对象来完成PreferencesPlaceholderConfigurer,如果使用配置①中的配置,可以写成如下情况:

 <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">        <property name="properties" ref="configProperties"/>  </bean>  
如果直接指定配置文件的话,可以写成如下情况:
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">        <property name="location">            <value>config/custom.properties</value>        </property>  </bean> 

9.@Autowired注解顾名思义,就是自动装配,其作用是为了消除代码Java代码里面的getter/setter与bean属性中的property。当然,getter看个人需求,如果私有属性需要对外提供的话,应当予以保留。

<context:component-scan base-package="xxx" />
一句最简单的配置,告诉spring使用注解,spring会自动扫描xxx路径下的注解。当Spring发现@Autowired注解时,将自动在代码上下文中找到和其匹配(默认是类型匹配)的Bean,并自动注入到相应的地方去。

如果接口有多个实现类,Spring并不知道应当引用哪个实现类。这种情况通常有两个解决办法:

①、删除其中多余的实现类,Spring会自动去base-package下寻找接口的实现类,发现接口只有一个实现类,便会直接引用这个实现类

②、实现类就是有多个该怎么办?此时可以使用@Qualifier注解:

注意@Qualifier注解括号里面的应当是接口实现类的类名

10.@Resource注解:

①、@Resource后面没有任何内容,默认通过name属性去匹配bean,找不到再按type去匹配

②、指定了name或者type则根据指定的类型去匹配bean

③、指定了name和type则根据指定的name和type去匹配bean,任何一个不匹配都将报错

@Autowired和@Resource区别

1、@Autowired默认按照Type方式进行bean匹配,@Resource默认按照Name方式进行bean匹配

2、@Autowired是Spring的注解,@Resource是J2EE的注解,在注解的时候查看这两个注解的包名就明白了

Spring属于第三方的,J2EE是Java自己的东西,因此,建议使用@Resource注解,以减少代码和Spring之间的耦合。

11.@Service注解

通过@Autowired或者@Resource注解,减少bean配置文件的property属性,spring的配置文件里面还有bean.可以使用@Service注解进行简化。简化是把bean也给去掉.使得spring配置文件里面只有一个自动扫描的标签,增强Java代码的内聚性并进一步减少配置文件。

@Service注解,其实做了两件事情:以注解在类A上为例

①、声明类A是一个bean,这点很重要,因为类A是一个bean,其他的类才可以使用@Autowired将类A作为一个成员变量自动注入

②、A在bean中的id是"a",即类名且首字母小写

12.@Scope注解。Spring默认产生的bean是单例的,如果想要使用多例,xml文件里面可以在bean里面配置scope属性。注解也是一 样,配置@Scope即可,默认是"singleton"即单例,"prototype"表示原型即每次都会new一个新的出来。
13.@Component注解。
@Component,@Service,@Controller,@Repository注解都可以注解类,并把这些类纳入进spring容器中管理。
@Service用于标注业务层组件;@Controller用于标注控制层组件;@Repository用于标注数据访问组件;@Component泛指组件,可以作用在任何层次。
14.@Param注解的作用是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql语句中 ,在方法参数的前面写上@Param("参数名"),表示给参数命名,名称就是括号中的内容。


原创粉丝点击