首页 > 技术文章 > Spring注解(持续更新)

cyx-garen 2018-04-27 17:24 原文

注解

  1. 在Spring中,标识一个@符号,Spring会优先查看该指令
  2. Spring配置文件对应的是父容器,SpringMVC配置文件对应的是子容器,前者做一般配置数据源,事务,注解等, 后者配置控制层相关(Controller)

@Controller

         在SpringMVC中,控制器Controller负责处理有DispatcherServlet分发的请求,把用户请求的数据经过业务处理之后封装成为一个Model,再把该Model返回给对应的View进行展示.

         使用@Controller标记类是一个Controller,@RequestMapping,@RequestParam等一些注解用于定义映射

  

 

  @Controller声明MyController是一个controller对象,一旦有某个类声明了@Controller注解,在容器启动的时候就会自动加载到Spring的Bean工厂中,所以不用new

 

  @RestController 等价于@Controller+@ResponseBody 即加上返回json的功能

 

@Component

         在Spring中,持久层使用@Repository(注入服务),        业务层使用@Service(注入dao),   控制层使用@Controller(实现dao),         而对于无法辨别具体哪个的使用@Component来进行凝视

         @Component(“userManager”)      注解容器bean,名字为userManager

 

         @ComponentScan  在Spring中启动组件扫描

                   若是没有其他配置,@ComponentScan默认会扫描与配置类相同的包下所有子包中带有@Component注解的类,并为其创建bean. 

                   @ComponentScan(basePackages={“other package”,”…”})

       @ComponentScan(basePackageClasses={“Class1.class”,”Class2.class”})

 

@Bean

         @Bean是一个方法级别上的注解,主要用于@Configuration注解的类里,也可用于@Component注解的类里

         @Bean对应Spring的xml中<bean>     @Configuration对应Spring的xml中<beans>

         @Bean注解用于告诉方法,产生一个Bean对象,然后将该Bean对象交由Spring管.产生的这个Bean对象只会被Spring调用一次,随后Spring会把该对象存入IOC容器中

        

 

         此处若是@Bean没有指定名称,则在调用时取方法名,即context.getBean(“getBean”)

 

@RequestMapping

         @RequestMapping注解会把HTTP请求映射到SpringMVC和REST控制器的处理方法上

         @RequestMapping可以在类级别,也可以在方法级别上使用

 

         @RequestMapping(value={“”,”/”,”aba*/”})

         //value为多个意味着多个地址映射到一个类/方法

 

         @RequestMapping(value=”hha”,params={“person=20”})

         //只处理/param?person=20 的连接

        

  (@RequestParam(value=“arg”,required=false) String str)

         //若是请求参数与处理方法的参数一至,则value无值       value=arg à www.XXX.xx?arg=1

          required=yes 说明必须传参

          defaultValue 默认取值

 

         @RequestMapping处理HTTP方法

                   @RequestMapping(method=RequestMethod.GET/POST/DELETE/PUT…)

                   快捷方式 @GetMapping,@PostMapping,@PutMapping

                   @GetMapping{“/person/{id}”};

 

         @ResponseBody     将后续的方法返回解雇以I/O流写入到浏览器

         @RequestBody        接收一个json对象的字符串

 

@SuppressWarnings

         忽略掉指定的警告

 

@Transational

         事务

 

@Value

         注入值

 

         若是在Controller中配置@Value,则需要在SpringMVC配置文件中配置:

         <context:property-placeholder location=”classpath:{my variable}.properties”/>

 

  不通过配置文件

         @Value(“hah”)

         Private String str;              //不通过配置文件注入字符串

         @Value(“#{beanInject.anther}”)

         Private String fromAntherBean;               //不通过配置文件注入其他Bean属性

 

  通过配置文件

         配置文件主要有两类

  1. application.properties.  application.properties在Spring Boot启动时自动加载此文件
  2. 自定义属性文件  自定义属性文件通过@PropertySource加载.可以同时加载多个文件. 如果第一个属性文件和第二个属性文件存在相同key,以第二个为准

     

 

 

@ConfigurationProperties

         把配置文件信息自动封装成实体类

    

 

@Autowired

         Autowired为Spring提供注解,按照ByType注入,可以把bean里的getter/setter方法省略,自动get/set

         @Autowired不仅可以使用在构造器上,也可以用在属性的setter方法上(setter没有任何特殊性,即@Autowired其实可以用在类的任何方法上) 

         Spring会尽可能满足bean的依赖,也就是方法参数上的依赖,假设只有一个bean匹配依赖需求,那么该bean会被装配进去  若没有匹配的bean,在应用上下文创建时,spring会抛出异常,避免异常à@Autowired(required=false)  多个bean满足匹配,spring会抛出异常

         先用@Component(等)注入需要的, 再使用@Autowired取依赖

 

@Configuration

         标注其为一个配置类

         @configuration相当于beans         @Bean相当于bean

    

 

 

 

 

@SessionAttributes

         默认情况下Spring MVC将模型中的数据存放在request域.当一个请求结束后,数据就失效了,跨页面使用需要session,@sessionAttributes可以将数据存储一份到session域中

 

@Id

         标注主键

         @Id

         @Column(name=”ID”)

         private int id=0;

 

@ManyToMany

         关系/对象映射        多对多

         Mappedby 标签定义在被拥有方,指向拥有方    理解为:拥有方能够自动维护跟被拥有方的关系

@Entity

         Hibernate的注解

         @Entity

                   对实体注释,任何Hibernate映射都要有该对象,是一个JPA实体

         @Table

                   声明数据库表,,没有则默认使用类名

         @Id

                   声明主键

         @GeneratedValue

                   自动生成,一般与@Id一起使用

         @Column

                   映射某一列

@Primary

         在众多相同的Bean中,优先使用@primary注解的Bean

 

@SpringBootApplication

  包含三个注解:@SpringBootConfiguration, @EnableAutoConfiguration, @ComponentScan

@SpringBootConfiguration

         使用@Configuration+@Bean可以创建简单的配置类,取代xml

         @SpringBootConfiguration标识这个类可以使用Spring IOC作为bean定义的来源

         @Bean告诉Spring,该对象作为在Spring上下文中的bean

    

 

 

@EnableAutoConfiguration

         自动配置Spring上下文,根据路径与bean定义自动配置.开启Spring Boot自动配置

@ComponentScan

         自动扫描指定包下的全部标有@Component的类,并注册为bean,包括@Component的子注解@Service,@Repository,@Controller

 

@PathVariable

         用于获取动态参数的值

         @RequestMapping(“/{type}”)

Public void test(@PathVariable(“type”) String type){

}

 

@Profile(“xxx”)

         只有再xxxx运行激活时才使用注解的类

         运行:配置spring.profiles.active

 

@Scheduled

  定时任务  @Scheduled(cron = " ")    需要在Application加@EnabledScheduling

    Scheduled原理 

* 第一位,表示秒,取值0-59
* 第二位,表示分,取值0-59
* 第三位,表示小时,取值0-23
* 第四位,日期天/日,取值1-31
* 第五位,日期月份,取值1-12
* 第六位,星期,取值1-7,星期一,星期二...,注:不是第1周,第二周的意思
          另外:1表示星期天,2表示星期一。
* 第7为,年份,可以留空,取值1970-2099    第七位可以省略

(*)星号:可以理解为每的意思,每秒,每分,每天,每月,每年...
(?)问号:问号只能出现在日期和星期这两个位置,表示这个位置的值不确定,每天3点执行,所以第六位星期的位置,我们是不需要关注的,就是不确定的值。同时:日期和星期是两个相互排斥的元素,通过问号来表明不指定值。比如,1月10日,比如是星期1,如果在星期的位置是另指定星期二,就前后冲突矛盾了。
(-)减号:表达一个范围,如在小时字段中使用“10-12”,则表示从10到12点,即10,11,12
(,)逗号:表达一个列表值,如在星期字段中使用“1,2,4”,则表示星期一,星期二,星期四
(/)斜杠:如:x/y,x是开始值,y是步长,比如在第一位(秒) 0/15就是,从0秒开始,每15秒,最后就是0,15,30,45,60 另:*/y,等同于0/y

  

  @Scheduled(fixRate = "60*1000", initalDelay = 1*1000)  //一分钟执行一次,延时一秒

 

推荐阅读