乐趣区

关于java:SpringBoot常用注解

一、注解 (annotations) 列表

@SpringBootApplication : 蕴含了 @ComponentScan、@Configuration 和 @EnableAutoConfiguration 注解。其中:@ComponentScan 让 SpringBoot 扫描到 Configguration 类并把它退出到程序上下文。
@Configuration 等同于 spring 的 xml 配置文文件,应用 java 代码能够查看类型平安,
@EnableAutoConfiguration 主动配置。
@ComponentScan 组件扫描。能够主动发现和拆卸一些 Bean。
@ComponentScan 可配合 CommandLineRunner 应用,在程序启动后执行一些根底工作。
@RestController 注解是 @Controller 和 @ResponseBody 的汇合,示意这个是管制机器 bean,并且是将函数的返回值至二级注入 HTTP 响应体中。
@Autowriable 主动注入
@PathVariable 获取参数
@JsonBackReference 解决嵌套外连连贯问题。
@RepositoryRestResourcepublic 配合 spring-boot-starter-data-rest 应用。

二、注解 (annotations) 详解

@SpringBootApplication: 申明 spring boot 主动给程序进行程序进行必要的配置,这个配置等同于:@Configguration, @ComponentScan 和
@EnableAutoConfiguration 三个配置。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootAplication
public class Application {public static void main (string[]args){SpringApplication.run(Application.calss,args);
   }
}


@RequrestMapping : 提供路由信息,负责 URL 到 Controller 中的具体函数的映射。
@Controller:用于定义控制器,在 spring 我的项目中有由控制器负责将用户发来的 URL 申请转发到对应的接口(service 层),个别这个注解在类中配合 @RequestMapper 应用.

代码显示如下:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping
/**
 * 打算在这个 controller 中解决所有页面申请
 * @author ldjx
 */
@Controller
@RequestMapepr("/")
public class PageController{@RequestMapper("doIndexUI")
public String doIndexUI(){return "index";}
  }

@ResponseBody: 示意该办法的返回后果间接写入 HTTP responebody 中,个别在异步获取数据应用。在应用 RequestMapping 后,返回值通常解析为跳转门路,加上 @responsebody 后返回后果不会被将解析为跳转门路,而是间接写入 HTTP reponsebody 中,比方异步获取 json 数据,加上 @responsebody 后,会间接返回 json 数据。改注解个别会配合 @RequestMapepr 一起应用。示例代码:
@RequestMapper(“/test”)
@ResponseBody
public String test(){
return “ok”;
}
或者返回自定义的类型,如应用 jsonResult 类对数据进行封装
@RequestMaper(“/testDelete”)
@ResponseBody
public JsonResult doDeleteObject(Integer id){
return new JsonResult(“delete ok”);
}

@RestControlelr: 用于标注管制层组件 (如:Struts 中的 action),
@ResponseBody 和 @Controoer 的汇合。
代码示例如下:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.cy.pj.common.pojo.JsonResult;
import com.cy.pj.sys.service.SysLogService;

/**
 * 尽量将返回页面的申请解决与数据处理的 controller 离开
 * 只解决页面返回申请的应用 @controller 即可, 将 @RestController 应用在返回数据处理的 controller 上
 * 防止了每个办法上都加 @ResponseBody 的麻烦
 * @author ldjx
 */

@RestController // 相当于 @ResponseBody + @Controlelr
@RequestMapper(“/test/”)
public class SysLogController{
@Autowird
private TestService testService;
@RequestMapper(“doDeleteObject”)
pbulic JsonResult doDeleteObject(Integer id){

// 调用业务办法执行删除操作...(testService.doDelete(id) )

return new JsonResult(“delete ok”);
}
@RequestMapping(“/doFindObjects”)
pbulic JsonResult doFindObjects(){
public JsonResult doFindObjects(){
return new JsonResult(testService.findObjects());`
// 业务层返回的数据封装在 JsonResult 对象中

}
}
}
@EnableAutoConfiguration: Spring Boot 主动配置 (auto-configuratin): 尝试依据你增加的 jar 依赖主动配置你的 Spring 利用。例如:如果你的 classpath 下存在 HSQLDB, 并且你没有手动配置任何数据库连贯 beans,那么咱们将主动配置一个内存型 (in-memory) 数据库,你能够将 @EableAutoConfiguration 或者 @SpringBootAppliocation 注解增加到一个 @Configuration 类上来抉择主动配置,如果发现利用了你不想要的特定主动配置类,你能够应用 @EnableAutoConguration 注解的排除属性来禁用它们。@ComponentScan: 示意该类主动发现扫描组件。集体了解为,如果扫描到有如果扫描到有 @Component、@Controller、@Service 等这些注解的类, 并注册为 Bean , 能够主动收集所有的 spring 组件,包扣 @Configuration 类。咱们常常应用 @ComponentsScan 注解搜寻 beans,并联合 @Autowired 注解导入。如果没有配置的话,Spring Boot 会扫描启动类所在包下以及子包下的应用了 @Service,@Repository 等注解的类。@Configuration: 相当于传统的 xml 配置文件,如果有些第三方库须要用到 xml 文件,倡议依然通过 @configuration 类作为我的项目的配置主类 --- 能够应用 @ImportResouration 注解加载 xml 配置文件。@import 用来导入其余配置类。@importResource:用来加载 xml 配置文件。@service: 个别用在润饰 service 层组件。@Repository:应用 @Repository 注解能够确保 DAO 或者 repositories 提供异样转译,这个注解润饰的 DAO 或者 repositories 类会被 ComponetScan 发现并配置,同时也不须要为它们提供 XML 配置项。@Value:注入 Spring boot application.properties 配置的属性的值。示例代码:@Value(value = "#{message}") private String message;
@Inject:等价于默认的 @Autowired,只是没有 required 属性;@Component:泛指组件,当组件不好归类的时候,咱们能够应用这个注解进行标注。@Bean:用 @Bean 标注办法等价于 XML 中配置的 bean, 放在办法的下面,而不是类,通知 Spring 容器,你能够从上面这个办法中拿到一个 Bean。示例代码:

public class ObjectTest{}
//——————————————————————————
/*

  • @Bean 注解通常会利用在一些配置类 (由 @Configuration 注解形容) 中, 用于形容
  • 具备返回值的办法, 而后零碎底层会通过反射调用其办法, 获取对象基于作用域将对象
  • 进行存储或利用。
  • @Bean 利用场景:第三方资源的整合及配置。

*/
//@Bean(“obj”) // 为返回值指定名字
@Bean //Spring 容器中由 @Bean 形容的办法的返回值, 对应的名字默认为办法名
public ObjectTest testObj() {

return new ObjectTest();

}

@AutoWired:主动注入依赖的 bean。byType 形式。把配置好的 Bean 拿来用,实现属性、办法的组装,它能够对类成员变量、办法及构造函数进行标注,实现主动拆卸的工作。当加上(required=false)时,就算找不到 bean 也不报错。@Qualifier:当有多个同一类型的 Bean 时,能够用 @Qualifier(“name”)来指定。与 @Autowired 配合应用。@Qualifier 限定描述符除了能依据名字进行注入,但能进行更细粒度的管制如何抉择候选者,具体应用形式如下:

public interface TestQua{}
public class QuaImpl01 implements TestQua{}
public class QuaImpl02 implements TestQua{}

@SpringBootTest// 该注解用于 SpringBoot 我的项目中的测试类
public class CacheTest {

//@Autowired 注解形容属性时, 零碎底层会基于属性类型从 spring 容器查找对象, 如果有多个类型都满足注入要求, 则还会基于属性名进行查找, 检测哪个 bean 名字与属性雷同, 如果有雷同的则间接取雷同进行注入, 没有则抛出异样
@Autowired
//@Qualifier 注解配合 @Autowired 注解应用, 用于指定将哪个 bean 的名字对应的对象注入给形容的属性
//@Qualifier("quaImpl01")
@Qualifier("quaImpl02")
private TestQua testQua;
@Test
void testCache() {System.out.println("testQua="+testQua);
}

}

@Resource(name="name",type="type"):没有括号内内容的话,默认 byName。与 @Autowired 干相似的事。@Lazy: 形容 Spring 治理的 bean 对象时, 能够让 bean 提早构建和初始化.
提早加载 (懒加载, 按需加载) 利用场景:

大对象(例如一些池对象), 稀少用(例如容器初始化时创立了对象也用不到).

@Scope: 形容类时用于指定类实例的作用域, 罕用取值:

*   1)singleton : 默认为单例作用域 - 类的实例在一个 JVM 内存中其实例只有一份, 此作用域通常还会配置 @Lazy 一起应用, 个别可重用对象可设计为单例, 对于这样的对象 spring 框架不仅仅负责其创立, 还会存储到 bean 池.
*   2)prototype (多例作用域 - 此作用域对象何时须要何时创立,spring 框架不负责销毁)个别不可重用对象, 或者说只应用一次就不再用此对象了, 这样的对象就可设计为多例作用域.

@PostConstruct: 此注解形容的办法为生命周期初始化办法.
@PreDestroy: 此注解形容的办法为生命周期销毁办法, 此办法会在对象销毁之前执行(如果是多例作用域, 则不会触发此办法).
示例代码:

@Scope //spring 容器中的 bean 没有应用 @Scope 注解形容时默认就是单例.
//@Scope(“prototype”)
@Lazy // 默认 value 属性值为 true, 示意此对象要提早构建及初始化.
//@Lazy(false)// 这里如果要写 false, 跟没有写 @Lazy 注解是一样的, 示意不反对对象提早构建及初始化.
@Component // 此注解形容 bean 示意这个 bean 对象会由 spring 创立, 其名字默认为类名, 首字母小写.
public class ObjectPool {//bean 的名字 objectPool
public int size;
public ObjectPool() {// 应用 lazy 注解后, 启动我的项目未触发构造方法, 阐明没有创立此对象(提早加载失效)

   System.out.println("ObjectPool()");

}
/**

* @PostConstruct 此注解形容的办法为生命周期初始化办法
* 在这样的办法中个别会为创立好的对象再此进行一些初始化.
*/

@PostConstruct
public void init() {

   System.out.println("init()");

}
/**

*@PreDestroy 此注解形容的办法为生命周期销毁办法, 此办法会在对象销毁之前执行.
* 在这样的办法中能够实现一些, 资源销毁操作.
*/

@PreDestroy
public void destory() {// 将对象从 bean 池中移除之前会执行此办法

  System.out.println("destory()");

}
}

#### 三 JPA 注解



























































退出移动版