java常用的注解

传统的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("参数名"),表示给参数命名,名称就是括号中的内容。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java常用注解及作用 1. @Override:标注在方法上,表示该方法覆盖了父类中的方法。 2. @Deprecated:标注在方法、类、字段上,表示该方法、类、字段已经过时,不推荐使用。 3. @SuppressWarnings:标注在类、方法、字段上,用于抑制编译器的警告信息。 4. @FunctionalInterface:标注在接口上,用于指定该接口是函数式接口。 5. @SafeVarargs:标注在方法上,用于表示该方法使用了可变参数,但是不会出现类型不安全的情况。 6. @Nullable:标注在参数、字段、方法返回值上,用于表示该参数、字段、方法返回值可能为null。 7. @NonNull:标注在参数、字段、方法返回值上,用于表示该参数、字段、方法返回值不可能为null。 8. @Resource:标注在字段、setter方法、构造方法上,用于注入依赖对象。 9. @Autowired:标注在字段、setter方法、构造方法上,用于注入依赖对象。 10. @Service:标注在类上,表示该类是一个服务类。 11. @Repository:标注在类上,表示该类是一个数据访问对象。 12. @Controller:标注在类上,表示该类是一个控制器。 13. @RequestMapping:标注在方法上,用于指定请求路径。 14. @PathVariable:标注在方法参数上,用于获取请求路径中的变量。 15. @RequestBody:标注在方法参数上,用于获取请求体中的数据。 16. @ResponseBody:标注在方法上,用于将方法返回值转换成指定的格式并返回给客户端。 17. @Transactional:标注在方法上,表示该方法需要在事务中执行。 18. @Aspect:标注在切面类上,用于指定该类是一个切面类。 19. @Pointcut:标注在方法上,用于指定切入点。 20. @Before:标注在方法上,表示该方法是一个前置通知。 21. @AfterReturning:标注在方法上,表示该方法是一个后置通知。 22. @AfterThrowing:标注在方法上,表示该方法是一个异常通知。 23. @Around:标注在方法上,表示该方法是一个环绕通知。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值