SpringBoot经常使用注解整理

@SpringBootApplication 定义在main方法入口类处,用于启动sping boot应用项目java

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Configuration
@EnableAutoConfiguration
@ComponentScan
public @interface SpringBootApplication {

	/** * Exclude specific auto-configuration classes such that they will never be applied. * @return the classes to exclude */
	Class<?>[] exclude() default {};

}
复制代码

@EnableAutoConfiguration 让spring boot根据类路径中的jar包依赖当前项目进行自动配置 在src/main/resources的META-INF/spring.factoriesweb

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration
如有多个自动配置,用“,”隔开
复制代码

@ImportResource 加载XML文件,通常是放在启动main类上spring

@ImportResource("classpath*:/spring/*.xml")  单个
@ImportResource({"classpath*:/spring/1.xml","classpath*:/spring/2.xml"})   多个
复制代码

@Value application.properties定义属性,直接使用@Value注入便可json

public class A{
	 @Value("${push.start:0}")    若是缺失,默认值为0
     private Long  id;
}
复制代码

@ConfigurationProperties(prefix="person") 能够新建一个properties文件,ConfigurationProperties的属性prefix指定properties的配置的前缀,经过location指定properties文件的位置api

@ConfigurationProperties(prefix="person")
public class PersonProperties {
	
	private String name ;
	private int age;
}
复制代码

@EnableConfigurationProperties 用 @EnableConfigurationProperties注解使 @ConfigurationProperties生效,并从IOC容器中获取bean 博客地址:blog.csdn.net/u010502101/… @RestController 组合@Controller和@ResponseBody,当你开发一个和页面交互数据的控制时,好比bbs-web的api接口须要此注解 @RequestMapping("/api2/copper") 用来映射web请求(访问路径和参数)、处理类和方法,能够注解在类或方法上。注解在方法上的路径会继承注解在类上的路径。 produces属性: 定制返回的response的媒体类型和字符集,或需返回值是json对象markdown

@RequestMapping(value="/api2/copper",produces="application/json;charset=UTF-8",method = RequestMethod.POST)
复制代码

@RequestParam 获取request请求的参数值app

public List<CopperVO> getOpList(HttpServletRequest request, @RequestParam(value = "pageIndex", required = false) Integer pageIndex, @RequestParam(value = "pageSize", required = false) Integer pageSize) {
 
  }
复制代码

@ResponseBody 支持将返回值放在response体内,而不是返回一个页面。好比Ajax接口,能够用此注解返回数据而不是页面。此注解能够放置在返回值前或方法前。微服务

另外一个玩法,能够不用@ResponseBody。
继承FastJsonHttpMessageConverter类并对writeInternal方法扩展,在spring响应结果时,再次拦截、加工结果
// stringResult: json返回结果
//HttpOutputMessage outputMessage

 byte[] payload = stringResult.getBytes();
 outputMessage.getHeaders().setContentType(META_TYPE);
 outputMessage.getHeaders().setContentLength(payload.length);
 outputMessage.getBody().write(payload);
 outputMessage.getBody().flush();
复制代码

@Bean @Bean(name="bean的名字",initMethod="初始化时调用方法名字",destroyMethod="close") 定义在方法上,在容器内初始化一个bean实例类oop

@Bean(destroyMethod="close")
@ConditionalOnMissingBean
public PersonService registryService() {
		return new PersonService();
	}
复制代码

@Service 用于标注业务层组件 @Controller 用于标注控制层组件(如struts中的action) @Repository 用于标注数据访问组件,即DAO组件 @Component 泛指组件,当组件很差归类的时候,咱们可使用这个注解进行标注。 @PostConstruct spring容器初始化时,要执行该方法ui

@PostConstruct  
public void init() {   
}   
复制代码

@PathVariable 用来得到请求url中的动态参数

@Controller  
public class TestController {  

     @RequestMapping(value="/user/{userId}/roles/{roleId}",method = RequestMethod.GET)  
     public String getLogin(@PathVariable("userId") String userId, @PathVariable("roleId") String roleId){
           
         System.out.println("User Id : " + userId);  
         System.out.println("Role Id : " + roleId);  
         return "hello";  
     
     }  
}
复制代码

@ComponentScan 注解会告知Spring扫描指定的包来初始化Spring

@ComponentScan(basePackages = "com.bbs.xx")
复制代码

@EnableZuulProxy 路由网关的主要目的是为了让全部的微服务对外只有一个接口,咱们只需访问一个网关地址,便可由网关将全部的请求代理到不一样的服务中。Spring Cloud是经过Zuul来实现的,支持自动路由映射到在Eureka Server上注册的服务。Spring Cloud提供了注解@EnableZuulProxy来启用路由代理 @Autowired 在默认状况下使用 @Autowired 注释进行自动注入时,Spring 容器中匹配的候选 Bean 数目必须有且仅有一个。当找不到一个匹配的 Bean 时,Spring 容器将抛出 BeanCreationException 异常,并指出必须至少拥有一个匹配的 Bean 当不能肯定 Spring 容器中必定拥有某个类的 Bean 时,能够在须要自动注入该类 Bean 的地方可使用 @Autowired(required = false),这等于告诉 Spring: 在找不到匹配 Bean 时也不报错 @Autowired注解注入map、list与@Qualifier 博客地址:blog.csdn.net/ethunsex/ar… @Configuration

@Configuration("name")//表示这是一个配置信息类,能够给这个配置类也起一个名称
@ComponentScan("spring4")//相似于xml中的<context:component-scan base-package="spring4"/>
public class Config {

    @Autowired//自动注入,若是容器中有多个符合的bean时,须要进一步明确
    @Qualifier("compent")//进一步指明注入bean名称为compent的bean
    private Compent compent;

    @Bean//相似于xml中的<bean id="newbean" class="spring4.Compent"/>
    public Compent newbean(){
        return new Compent();
    }   
}
复制代码

@Import(Config1.class) 导入Config1配置类里实例化的bean

@Configuration
public class CDConfig {

    @Bean   // 将SgtPeppers注册为 SpringContext中的bean
    public CompactDisc compactDisc() {
        return new CompactDisc();  // CompactDisc类型的
    }
}

@Configuration
@Import(CDConfig.class)  //导入CDConfig的配置
public class CDPlayerConfig {

    @Bean(name = "cDPlayer")
    public CDPlayer cdPlayer(CompactDisc compactDisc) {  
         // 这里会注入CompactDisc类型的bean
         // 这里注入的这个bean是CDConfig.class中的CompactDisc类型的那个bean
        return new CDPlayer(compactDisc);
    }
}
复制代码

@Order @Order(1),值越小优先级超高,越先运行 @ConditionalOnExpression

@Configuration
@ConditionalOnExpression("${enabled:false}")
public class BigpipeConfiguration {
    @Bean
    public OrderMessageMonitor orderMessageMonitor(ConfigContext configContext) {
        return new OrderMessageMonitor(configContext);
    }
}
复制代码

开关为true的时候才实例化bean @ConditionalOnProperty 这个注解可以控制某个 @Configuration 是否生效。具体操做是经过其两个属性name以及havingValue来实现的,其中name用来从application.properties中读取某个属性值,若是该值为空,则返回false;若是值不为空,则将该值与havingValue指定的值进行比较,若是同样则返回true;不然返回false。若是返回值为false,则该configuration不生效;为true则生效 博客地址:blog.csdn.net/dalangzhong… @ConditionalOnClass 该注解的参数对应的类必须存在,不然不解析该注解修饰的配置类

@Configuration
@ConditionalOnClass({Gson.class})
public class GsonAutoConfiguration {
    public GsonAutoConfiguration() {
    }

    @Bean
    @ConditionalOnMissingBean
    public Gson gson() {
        return new Gson();
    }
}
复制代码

@ConditionalOnMisssingClass({ApplicationManager.class}) 若是存在它修饰的类的bean,则不须要再建立这个bean @ConditionOnMissingBean(name = "example") 表示若是name为“example”的bean存在,该注解修饰的代码块不执行

相关文章
相关标签/搜索