JAVA注解大全(个人复习不断增加)

首先什么是注解?

以前,XML是各大框架的青睐者,它以松耦合的方式完成了框架中几乎所有的配置,但是随着项目越来越庞大,XML的内容也越来越复杂,维护成本变得越来越高。
于是就有人提出来一种标记式高耦合的配置方式,注解。方法上可以进行注解,类上也可以注解,字段属性上也可以注解,反正几乎需要配置的地方都可以进行注解。
关于注解和XML两种不同的配置模式,争论了好多年了,各有各的优劣,注解可以提供更大的便捷性,易于维护修改,但耦合度高,而 XML 相对于注解则是相反的。
追求低耦合就要抛弃高效率,追求效率必然会遇到耦合。本文意不再辨析两者谁优谁劣,而在于以最简单的语言介绍注解相关的基本内容。

不使用注解和使用注解对比:
注解快速入门


@Controller:

简单说Controller就是负责解析用户的输入,处理后返回相应的结果。
标识一个该类是Spring MVC controller处理器,用来创建处理http请求的对象。
1.在 RESTful 接口中,Controller 接受用户的参数,从数据库中查找内容返回给用户或者将用户的请求更新到数据库中。
2.在 HTML 页面请求中,Controller 根据用户访问不同的 URL,渲染不同的模板得到 HTML 返回给用户。
3.在代理服务器中,Controller 将用户的请求转发到其他服务器上,并将其他服务器的处理结果返回给用户。

框架推荐 Controller 层主要对用户的请求参数进行处理(校验、转换),然后调用对应的 service 方法处理业务,得到业务结果后封装并返回:
1.获取用户通过 HTTP 传递过来的请求参数。
2.校验、组装参数。
3.调用 Service 进行业务处理,必要时处理转换 Service 的返回结果,让它适应用户的需求。
4.通过 HTTP 将结果响应给用户。

@Controller
public class TestController {
    
    
        @RequestMapping("/test")
        public String test(Map<String,Object> map){
    
    

            return "hello";
        }
}

@RestController

Spring4之后加入的注解,原来在@Controller中返回json需要@ResponseBody来配合,如果直接用@RestController替代@Controller就不需要再配置@ResponseBody,默认返回json格式。
@RestController=@Controller+@ResponseBody两个注解,
注解为止在controller类上,相当于整个类中所有方法的返回值都为json字符串

@RestController
public class TestController {
    
    
        @RequestMapping("/test")
        public String test(Map<String,Object> map){
    
    

            return "hello";
        }
}

@service

用于标注业务层组件,以注解的方式把这个类注入到spring配置中。
service 是有用的相当于 xml配置中得bean id = service 也可以不指定 不指定相当于 bean id = com. service.service 就是这个类的全限定名,表示给当前类命名一个别名,方便注入到其他需要用到的类中;不加的话,默认别名就是当前类名,但是首字母小写 。
注解用于类上,标记当前类是一个service类,加上该注解会将当前类自动注入到spring容器中,不需要再在applicationContext.xml文件定义bean了。
简单理解就是:告诉spring,我这个service接口的实现类是这个,你帮我在spring容器里创建它。

如果不懂bean的同学可以参考Java Bean详解
JavaBean可以看成是一个黑盒子,即只需要知道其功能而不必管其内部结构的软件设备。
黑盒子只介绍和定义其外部特征和与其他部分的接口,如按钮、窗口、颜色、形状、句柄等。

@Service
public class TestService {
    
    
        public String test(Map<String,Object> map){
    
    
            return "hello";
        }
}

@Autowired

用来装配bean,都可以写在字段上,或者方法上。
默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,例如:@Autowired(required=false)
它还可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired的使用来消除 set ,get方法。在使用@Autowired之前,我们对一个bean配置起属性时,是这用用的

通过这种方式来,配置比较繁琐,而且代码比较多。在Spring 2.5 引入了 @Autowired 注释

@RestController
public class TestController {
    
    

        @Autowired(required=false)
        private TestService service;

        @RequestMapping("/test")
        public String test(Map<String,Object> map){
    
    

            return "hello";
        }
}

@RequestMapping

类定义: 提供初步的请求映射信息,相对于 WEB 应用的根目录。
RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
RequestMapping注解有六个属性,下面我们把她分成三类进行说明。
1、 value, method;
value:指定请求的实际地址,指定的地址可以是URI Template 模式;
method:指定请求的method类型, GET、POST、PUT、DELETE等;
2、 consumes,produces;
consumes:指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
3、 params,headers;
params: 指定request中必须包含某些参数值是,才让该方法处理。
headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。

@RestController
public class TestController {
    
    
        @RequestMapping("/test")
        public String test(Map<String,Object> map){
    
    

            return "hello";
        }
}

@Bean

产生一个bean的方法,并且交给Spring容器管理,相当于配置文件中的
复制代码

@Bean
public class UserTest(){
    
    
    public User getUser(){
    
    
        System.out.println("创建user实例");
        return new User("张三",26);
    }
}

@Component

把普通pojo实例化到spring容器中,相当于配置文件中的
它泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。
此外,被@controller 、@service、@repository 、@component 注解的类,都会把这些类纳入进spring容器中进行管理
复制代码

什么是pojo?POJO详细讲解
POJO实质上可以理解为简单的实体类,顾名思义POJO类的作用是方便程序员使用数据库中的数据表,对于广大的程序员,可以很方便的将POJO类当做对象来进行使用,当然也是可以方便的调用其get,set方法。POJO类也给我们在struts框架中的配置带来了很大的方便。

@Component
public class TestClass {
    
    
        public String test(Map<String,Object> map){
    
    
            return "hello";
        }
}

@MapperScan

@Mapper注解:
作用:在接口类上添加了@Mapper,在编译之后会生成相应的接口实现类
添加位置:接口类上面

@Mapper
public interface UserDAO {
    
    
   //代码
}

如果想要每个接口都要变成实现类,那么需要在每个接口类上加上@Mapper注解,比较麻烦,解决这个问题用@MapperScan

2、@MapperScan
作用:指定要变成实现类的接口所在的包,然后包下面的所有接口在编译之后都会生成相应的实现类
添加位置:是在Springboot启动类上面添加,

@SpringBootApplication
@MapperScan("com.winter.dao")
public class SpringbootMybatisDemoApplication {
    
    
    public static void main(String[] args) {
    
    
        SpringApplication.run(SpringbootMybatisDemoApplication.class, args);
    }
}

添加@MapperScan(“com.winter.dao”)注解以后,com.winter.dao包下面的接口类,在编译之后都会生成相应的实现类

3、使用@MapperScan注解多个包
(实际用的时候根据自己的包路径进行修改)

@SpringBootApplication  
@MapperScan({
    
    "com.kfit.demo","com.kfit.user"})  
public class App {
    
      
    public static void main(String[] args) {
    
      
       SpringApplication.run(App.class, args);  
    }  
}  

猜你喜欢

转载自blog.csdn.net/QQ1043051018/article/details/112850632