SSM框架注解
Spring中的注解:详见:SSM框架注解总结
Spring中的注解:
@Component:把资源对象交给spring来管理,相当于在xml中配置一个bean,此注解使用在实体bean的头部,等价于XML中配置的“<bean id="" class="">”标签。
@Controller、 @Service、 @Repository:都是针对@Component注解的衍生注解,他们的作用及属性都是一样的,等价于XML中配置用于注入数据的“<property name="" ref=""> <property name="" value="">”标签,他们只不过是提供了更加明确的语义化。
-@Controller:一般用于表现层的注解。
-@Service:一般用于业务层的注解。
-@Repository:一般用于持久层的注解。
@Autowired:自动按照类型注入。当使用注解注入属性时,set方法可以省略。它只能注入其他bean类型。当有多个类型匹配时,使用要注入的对象的变量名称作为bean的id,在spring容器查找,找到了也可以注入成功,如果找不到就会报错。
@Qualifier:在自动按照类型注入的基础之上,再按照Bean的id注入。它在给字段注入时不能独立使用,必须和@Autowire一起使用,但是给方法参数注入时,可以独立使用。
属性:
value:指定bean的id。
@Resource:直接按照Bean的id注入。它也只能注入bean类型。
属性:
name:指定bean的id。
@Value:注入基本数据类型和String类型数据的
属性:
value:用于指定值
@Configuration:用于指定当前类是一个spring配置类,当创建容器时会从该类上加载注解。获取容器时需要使用AnnotationApplicationContext(有@Configuration注解的类.class)。
@ComponentScan:用于指定spring在初始化容器时要扫描的包。作用和在spring的xml配置文件中的“ <context:component-scan base-package="cn.study"></context:component-scan>”
属性:
Value(单独使用可省略):用于指定要扫描的包。和标签中的basePackages属性作用一样。
@Bean:该注解只能写在方法上,将方法的返回值作为一个bean,并且放入spring容器。id就是name的属性的值
属性:
name:给当前@Bean注解方法创建的对象指定一个名称(即bean的id)。
@PropertySource:
用于加载.properties文件中的配置。例如我们配置数据源时,可以把连接数据库的信息写到properties配置文件中,就可以使用此注解指定properties配置文件的位置。
属性:
value[]:用于指定properties文件位置。如果是在类路径下,需要写上classpath:
@Import:用于导入其他配置类,在引入其他配置类时,其他类上可以不用再写@Configuration注解。当然,写上也没问题。
属性:
value[]:用于指定其他配置类的字节码。
@Aspect:
指定当前类是通知类,此注解使用在类上。
SpringMvc中的注解:
@Controller:
Spring的Controller是Singleton的。这就意味着会被多个请求线程共享。因此,我们将控制器设计成无状态类。
@RequestMapping:
在类前面定义,则将url和类绑定;(如果该类里只有单个方法的话可以这样写,访问该地址直接调用该方法):
@PathVariable:
与 Rest风格(占位符)的映射一起使用获取URL路径的参数数据:
@RequestParam:
常用来处理简单类型的绑定,通过Request.getParameter() 获取的String可直接转换为简单类型的情况( String--> 简单类型的转换操作由ConversionService配置的转换器来完成);因为使用request.getParameter()方式获取参数,所以可以处理get 方式中queryString的值,也可以处理post方式中 body data的值:
用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容,提交方式GET、POST: GET模式下,这里使用了@PathVariable绑定输入参数,非常适合Restful风格。因为隐藏了参数与路径的关系,可以提升网站的安全性,静态化页面,降低恶意攻击风险。POST模式下,使用@RequestBody绑定请求对象,Spring会帮你进行协议转换,将Json、Xml协议转换成你需要的对象。
该注解有三个属性: value、required、defaultValue:value用来指定要传入值的id名称、 required用来指示参数是否必须绑定、defaultValue用来指定在前端没有传值的情况下限定默认的值。
@CookieValue:使用方法同@RequestParam,只不过它是获取cookie的值。
@ResponseBody:
当一个处理请求的方法标记为@ResponseBody时,表示该方法需要输出其他视图(json、xml),springmvc会通过默认的json转化器转化输出。
@RestController:
有时如果在一个Contoller中所有的方法都是用来响应json格式数据的,那么如果有多个方法,就需要在多个方法上使用@ResponseBody,这样太麻烦,springmvc提供了一个@RestController,将该注解使用在Controller类上,那么该controller中的所有方法都默认是响应json格式的数据了。
#Mybatis框架常用注解总结:
@Mapper:作用是为了把mapper这个DAO交给Spring容器管理,一般不用加,我们在XXXMapper.xml中的namespace中已经指定过了。
@Param:
使用@Param注解为相应的查询接口传递值,但是具体SQL语句中的参数要与@Param中定义的参数保持一致。
SpringBoot注解
1、@SpringBootApplication
这是 Spring Boot 最最最核心的注解,用在 Spring Boot 主类上,标识这是一个 Spring Boot 应用,用来开启 Spring Boot 的各项能力。
其实这个注解就是 @SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan 这三个注解的组合,也可以用这三个注解来代替 @SpringBootApplication 注解。
@Configuration 等同于spring的XML配置文件;使用Java代码可以检查类型安全。
@EnableAutoConfiguration 自动配置。
@ComponentScan 组件扫描,可自动发现和装配一些Bean。
@Component可配合CommandLineRunner使用,在程序启动后执行一些基础任务。
@RestController注解是@Controller和@ResponseBody的合集,表示这是个控制器bean,并且是将函数的返回值直 接填入HTTP响应体中,是REST风格的控制器。
@Autowired自动导入。
@PathVariable获取参数。
2、@Repository
用于标注数据访问组件,即DAO组件。
3、@Service
用于标注业务层组件。
4、@RestController
用于标注控制层组件(如struts中的action),包含@Controller和@ResponseBody
5、@ResponseBody
表示该方法的返回结果直接写入HTTP response body中
一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析
为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@responsebody后,会直接返回json数据。
6、@Component
泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
7、@ComponentScan
组件扫描。相当于,如果扫描到有@Component @Controller @Service等这些注解的类,则把
这些类注册为bean。
8、@Configuration
指出该类是 Bean 配置的信息源,相当于XML中的,一般加在主类上。
9、@Bean
相当于XML中的,放在方法的上面,而不是类,意思是产生一个bean,并交给spring管理。
10、@EnableAutoConfiguration
让 Spring Boot 根据应用所声明的依赖来对 Spring 框架进行自动配置,一般加在主类上。
11、@AutoWired
byType方式。把配置好的Bean拿来用,完成属性、方法的组装,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。
当加上(required=false)时,就算找不到bean也不报错。
12、@Qualifier
当有多个同一类型的Bean时,可以用@Qualifier("name")来指定。与@Autowired配合使用
13、@Resource(name="name",type="type")
没有括号内内容的话,默认byName。与@Autowired干类似的事。
14、@RequestMapping
RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
该注解有六个属性:
params:指定request中必须包含某些参数值是,才让该方法处理。
headers:指定request中必须包含某些指定的header值,才能让该方法处理请求。
value:指定请求的实际地址,指定的地址可以是URI Template 模式
method:指定请求的method类型, GET、POST、PUT、DELETE等
consumes:指定处理请求的提交内容类型(Content-Type),如application/json,text/html;
produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回
15、@RequestParam
用在方法的参数前面。
@RequestParam String a =request.getParameter("a")。
16、@PathVariable
路径变量。参数与大括号里的名字一样要相同。
RequestMapping("user/get/mac/{macAddress}")
public String getByMacAddress(@PathVariable String macAddress){
//do something;
}
1 @data 注解
添加@Data注解可以不用书写 getter,setter方法, toString方法 hashCode方法 equals方法
2 @ToString(callSuper = true) 注解
添加@ToString就是节省了ToString方法
3 @EqualsAndHashCode(callSuper=true) 注解
- 此注解会生成equals(Object other) 和 hashCode()方法。
- 它默认使用非静态,非瞬态的属性
- 可通过参数exclude排除一些属性
- 可通过参数of指定仅使用哪些属性
- 它默认仅使用该类中定义的属性且不调用父类的方法
- 可通过callSuper=true解决上一点问题。让其生成的方法中调用父类的方法。
(@data @ToString(callSuper = true) @EqualsAndHashCode(callSuper=true) 这三个注解通常使用在实体类中 )
4 @component(“budget.payment.QueryPaymentListService”)
(把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="useService" class="com.gyf.service.QueryPaymentListServiceImpl"/>)
@component 一般用在Service层中的实现类头上
5 @Service 注解
@Service(“userService”)注解是告诉Spring,当Spring要创建UserServiceImpl的的实例时,bean的名字必须叫做"userService",这样当Action需要使用UserServiceImpl的的实例时,就可以由Spring创建好的"userService",然后注入给Action。
@Service 一般用在Service层中的实现类头上
6 @Slf4j 注解
注解在类上;为类提供一个 属性名为log 的 log4j 日志对像
@Slf4j 一般用在Service层中的实现类头上
7 @SimpleDAO 注解
8 @Repository(budget.payment.paymentDAO) 注解
@Repository(value=“userDao”)注解是告诉Spring,让Spring创建一个名字叫“userDao”的UserDaoImpl实例。
当Service需要使用Spring创建的名字叫“userDao”的UserDaoImpl实例时,就可以使用@Resource(name =
“userDao”)注解告诉Spring,Spring把创建好的userDao注入给Service即可。
@Repository 注解 一般用在dao中
9 @Autowired 注解
spring可以自动帮你把Bean里面引用的对象的setter/getter方法省略,它会自动帮你set/get。
@Autowired注释进行自动注入时,spring容器中匹配的候选Bean数目必须有且仅有一个。
当找不到一个匹配的Bean时,spring容器将抛出BeanCreationException异常,并指出必须至少拥有一个匹配的Bean。
如果spring容器中拥有多个候选Bean,spring容器在启动时也会抛出BeanCreationException
这个时候就可以借助@Qualifier注释指定注入Bean的名称,这样@Autowired遇到多个候选Bean的问题也就解决了
@Autowired 一般用在Service层中的实现类中
10 @Resource注解
@Resource分两种情况 : 在不传参数或者传入空参的情况下 , @Resource默认根据注入bean的字段名来寻找bean
(若放在function上 , 如果该function为set方法, 则bean名称解析为set对应的字段名 , 如果不是set方法 ,
则bean解析为function的方法名) , 如果找不到 , 在根据类型来寻找对应的bean, 如果还找不到 , 抛出异常 ,
如果找不到与字段名相匹配的bean , 但是类型匹配的却有多个 , 也抛出异常 ; 在传入确定参数的情况下 ,
@Resouce或根据传入的name值来寻找这个名称的bean , 如果找不到则抛出异常 , 或者根据type值来寻找这个类型的bean ,
也可以同时指定name和type.
@Resource注解 一般用在service中的 引用接口中
11 @Qualifier 注解
@Qualifier 可以写在field 或者function传入参数的参数类型前面 , 用来指定注入bean的名称
,如果不指定value, 那么默认是空名称, 也是可以编译通过的 , 但是无法匹配到对应的bean
(以两个同一interface的实现注入不同名称的bean来测试 , 如果本身只有一个对应的bean , 或者仅仅通过@Resource 或
@Autowired就可以找到对应的bean , 就无法测试出来@Qualifier的效果了 ) ,所以一般情况下 ,
使用@Qualifier都需要传入value参数 , 指定bean的名称 ,
@Qualifier 注解 一般用在service中的 引用Dao中