什么是注解?
Annotation(注解)是JDK1.5及以后版本引入的。它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。注解是以‘@注解名’在代码中存在的,根据注解参数的个数,我们可以将注解分为:标记注解、单值注解、完整注解三类。它们都不会直接影响到程序的语义,只是作为注解(标识)存在,我们可以通过反射机制编程实现对这些元数据(用来描述数据的数据)的访问。另外,你可以在编译时选择代码里的注解是否只存在于源代码级,或者它也能在class文件、或者运行时中出现(SOURCE/CLASS/RUNTIME)。
注解的效应:
传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop、事物,这么做有两个缺点:
①如果所有的内容都配置在.xml文件中,会导致.xml文件过大;如果按需求分开.xml文件,又会导致.xml文件过多。总之这会使得配置文件的可读性与可维护性变得很低。
②开发中,在.java文件和.xml文件之间不断切换,是一件麻烦的事。同时这种思维上的不连贯也会降低开发的效率
为了解决这两个问题,Spring引入了注解,通过"@XXX"的方式,让注解与Java Bean紧密结合,既大大减少了配置文件的体积,又增加了Java Bean的可读性与内聚性。
以下介绍在Spring中常用的几种注解:
Spring的注解形式:@Repository、@Service、@Controller,它们分别对应存储层Bean,业务层Bean,和展示层Bean。
1.类名上加 @Data注解,导入依赖包:lombok.Data,目的是为了在编译中自动生成Getter,Setter,equals,hashCode,toString方法,简化java代码编写。
2.在SpringMVC中,控制器Controller负责处理由DispatcherServlet分发的请求,
它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model返回给对应的View进行展示。在SpringMVC 中提供了一个非常简便的定义Controller 的方法,你无需继承特定的类或实现特定的接口,只需使用@Controller标记一个类是Controller。
@Controller用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller对象。用于标注控制层组件。
分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否使用了@RequestMapping注解。@Controller只是定义了一个控制器类,而使用@RequestMapping注解的方法才是真正处理请求的处理器。
3.@RequestMapping用来处理请求地址映射,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
其属性:https://www.cnblogs.com/jpfss/p/9546142.html
4.@Autowired注解是自动装配,其作用是替代Java代码里面的getter/setter与bean属性中的property。如果私有属性需要对外提供的话,getter应当予以保留。
5.@Repository注解它用于将数据访问层 (DAO 层 ) 的类标识为 Spring Bean。将类识别为Bean,在持久层中具有将数据库操作抛出的原生异常翻译转化为spring的持久层异常的功能。
用idea写一个实现类时引用了mapper类的来调用dao层
为什么 @Repository 只能标注在 DAO 类上呢?这是因为该注解的作用不只是将类识别为Bean,同时它还能将所标注的类中抛出的数据访问异常封装为 Spring 的数据访问异常类型。 Spring本身提供了一个丰富的并且是与具体的数据访问技术无关的数据访问异常结构,用于封装不同的持久层框架抛出的异常,使得异常独立于底层的框架。
6.@Param注解的作用是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql语句中 。
@Param注解单一属性
dao层例:
public User queryUser(@Param("user") User user, @Param("clomn") String clomn);
对应的mapper.xml:
insert into tb_user(name, pwd) values (#{user.name}, #{user.pwd})
当你使用@Param注解来声明参数时,如果使用 #{} 或 ${} 的方式都可以;
当你不使用@Param注解来声明参数时,必须使用使用 #{}方式。如果使用 ${} 的方式,会报错。
当不使用@Param注解时,参数只能有一个,而且是JavaBean,在sql中只能引用JavaBean的属性。
7.@Service注解用于标注业务层组件,可以更加简化.xml文件配置。
8.@Override注解是伪代码,表示重写(当然不写也可以),不过写上有如下好处:
①可以当注释用,方便阅读;
②编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错。例如,你如果没写@Override,而你下面的方法名又写错了,这时你的编译器是可以编译通过的,因为编译器以为这个方法是你的子类中自己增加的方法。
9.@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据,需要注意的呢,在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。
10.@Transactional注解 是事务开启 ,或者是基于接口的或者是基于类的代理被创建。所以在同一个类中一个方法调用另一个方法有事务的方法,事务是不会起作用的。
在需要事务管理的地方加@Transactional 注解。@Transactional 注解可以被应用于接口定义和接口方法、类定义和类的public 方法上。
@Transactional 注解只能应用到 public 可见度的方法上。如果你在 protected、private 或者package-visible 的方法上使用@Transactional 注解,它也不会报错,但是这个被注解的方法将不会展示已配置的事务设置。
11.@SpringBootApplication注解 是Sprnig Boot项目的核心注解,目的是开启自动配置