在Spring Boot中几乎可以完全弃用xml配置文件,在这里总结下常用的注解。
Spring最开始是为了解决EJB等大型企业框架对应用程序的侵入性 因此大量依靠配置文件来“非侵入式”得给POJO增加功能 从Spring 3.x开始,Spring被外界最为诟病的一点就是配置繁多,号称“配置地狱”
从Spring 4.x开始,Spring.io提供了三种方式编织Bean:
利用注解:隐式配置,例如:@Autowired、@Bean、@Component等,通过注解来简化xml文件。 利用Java文件:显示配置,比xml配置的优势是具备类型安全 利用传统的xml配置文件
注解(annotations)列表
@ResponseBody
用该注解修饰的函数,会将结果直接填充到HTTP的响应体中,一般用于构建RESTful的api;
@Controller
用于定义控制器类,在spring 项目中由 控制器 负责 将用户发来的URL请求 转发到 对应的服务接口(service层)
一般情况下@Controller与 @RequestMapping 一起使用,用于指定 URL对应的处理方法或者处理类
@Controller public class Index {
@RequestMapping(value ="/" , method = RequestMethod.GET)
@ResponseBody
public String hello(){
return "hello world" ;
}
}
@Runwith:
@RestController
与Controller类似,使用这个注解表明是REST接口
@ResponseBody
@RequestMapping
提供路由信息,负责 URL到Controller中的具体函数的映射。
@EnableAutoConfiguration
Spring Boot自动配置(auto-configuration):尝试根据你添加的jar依赖自动配置你的Spring应用。例如,如果你的classpath下存在HSQLDB,并且你没有手动配置任何数据库连接beans,那么我们将自动配置一个内存型(in-memory)数据库”。你可以将@EnableAutoConfiguration或者@SpringBootApplication注解添加到一个@Configuration类上来选择自动配置。如果发现应用了你不想要的特定自动配置类,你可以使用@EnableAutoConfiguration注解的排除属性来禁用它们。
@ComponentScan
表示将该类自动发现(扫描)并注册为Bean,可以自动收集所有的Spring组件,包括@Configuration类。我们经常使用@ComponentScan注解搜索beans,并结合@Autowired注解导入。
@Configuration
相当于传统的xml配置文件,如果有些第三方库需要用到xml文件,建议仍然通过@Configuration类作为项目的配置主类——可以使用@ImportResource注解加载xml配置文件。
@SpringBootApplication
相当于@EnableAutoConfiguration、@ComponentScan和@Configuration的合集。
@Import
用来导入其他配置类。
@ImportResource
用来加载xml配置文件。
@Autowired
自动导入依赖的bean
@Service
一般用于修饰service层的组件
@Repository
使用@Repository注解可以确保DAO或者repositories提供异常转译,这个注解修饰的DAO或者repositories类会被ComponetScan发现并配置,同时也不需要为它们提供XML配置项。
@value注解来读取application.properties里面的配置
@ControllerAdvice: 包含@Component。可以被扫描到。 统一处理异常
@ExceptionHandler(Exception.class ):用在方法上面表示遇到这个异常就执行以下方法。
@PathVariable :路径变量。
@RequestParam :用在方法的参数前面。
@AutoWired byType方式。把配置好的Bean拿来用,完成属性、方法的组装,它可以对类成员变量、方法及构 造函数进行标注,完成自动装配的工作。 当加上(required=false)时,
就算找不到bean也不报错。
@Component: 泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。一般公共的方法会用上这个
@ResponseBody 表示该方法的返回结果直接写入HTTP response body中 一般在异步获取数据时使用,
在使用@RequestMapping后,返回值通常解析为跳转路径,加上 @responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如 异步获取json数据,加上@responsebody后,会直接返回json数据。
@Profiles Spring Profiles提供了一种隔离应用程序配置的方式,并让这些配置只能在特定的环境下生效。 任何@Component或@Configuration都能被@Profile标记,从而限制加载它的时机。
@RestController和@RequestMapping注解 :
4.0重要的一个新的改进是@RestController注解,它继承自@Controller注解。4.0之前的版本, spring MVC的组件都使用@Controller来标识当前类是一个控制器servlet。使用这个特性,我们可以开发REST服务的时候不需要使用@Controller而专门的@RestController。
当你实现一个RESTful web services的时候,response将一直通过response body发送。为了简化开发,Spring 4.0提供了一个专门版本的controller。下面我们来看看@RestController实 现的定义:
@RequestMapping 注解提供路由信息。它告诉Spring任何来自"/"路径的HTTP请求都应该被映射到 home 方法。
@RestCo
lle ntror 注解告诉Spring以字符串的形式渲染结果,并直接返回给调用者。
@RestController 和 @RequestMapping 注解是Spring MVC注解(它们不是Spring Boot的特定部分)
REST服务:
REST是一套用来创建Web Service的方法。
REST式的Web Service的主旨是让事情尽量的简单化。
REST式的Web Service使用HTTP里的方法:GET, POST, DELETE, PUT。你不需要使用URL或请求的内容来指定这个方法。
REST式的Web Service调用产生的HTTP请求 内容只是用于服务数据不是用来指明调用方法,目标对象或返回值的。
使用REST方法来开发Web Service的关键点是利用HTTP协议的简单性,而不是去扩展这个协议。你的Web Service调用最终应该是非常的简单而且非常的易于理解。
@Scheduled:spirng定时的注解:
@Scheduled(fixedRate = 5000)
这个注解在容器启动时便会生效,5秒执行一次任务.如果第一次任务时间为7秒从10:00执行到10:07,那么第二次任务为2秒的话,则从10:07执行到10:10(其中1秒为任务的轮询时间).
@Scheduled (cron =
" 0 22 13 ? * *" )
这个注解是在容器启动后的指定时间执行
@EnableAutoConfiguration注解: 第二个类级别的注解是 @EnableAutoConfiguration 。这个注解告诉Spring Boot根据添加的jar依赖猜测你想如何配置Spring。
@PathVariable:
@PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过
@PathVariable("xxx") 绑定到操作方法的入参中。
@JsonlgnoreProperties(ignoreUnknown=true):
就是说这个属性不进行json的转化,忽略这个属性的json转化。 有意思作用呢? 主要是防止一些Json转换异常错误
@RunWith():
在使用所有注释前必须使用@RunWith(SpringJUnit4ClassRunner.class),让测试运行于Spring测试环境
Spring
架
在org.springframework.test.annotation 包中提供了常用的Spring特定的注解集,
@SpringBootTest():
@TestPropertySource()
@Configuration把一个类作为一个IoC容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean。
@Scope注解 作用域
@Lazy(true) 表示延迟初始化
@Service用于标注业务层组件、
@Controller用于标注控制层组件(如struts中的action)
@Repository用于标注数据访问组件,即DAO组件。
@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
@Scope用于指定scope作用域的(用在类上)
@PostConstruct用于指定初始化方法(用在方法上)
@PreDestory用于指定销毁方法(用在方法上)
@DependsOn:定义Bean初始化及销毁时的顺序 @Primary:自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常
@Autowired 默认按类型装配,如果我们想使用按名称装配,可以结合@Qualifier注解一起使用。如下: @Autowired @Qualifier("personDaoBean") 存在多个实例配合使用 @Resource默认按名称装配,当找不到与名称匹配的bean才会按类型装配。
@PostConstruct 初始化注解
@PreDestroy 摧毁注解 默认 单例 启动就加载
@Async异步方法调用
@Configuration:
Spring Boot提倡基于Java 的配置。尽管你可以使用一个XML源来调用 SpringApplication.run() ,我们通常建议你使用 @Configuration 类作为主要源。一般定义 main 方法的类也是主要 @Configuration 的一个很好候选。你不需要将所有的 @Configuration 放进一个单独的类。 @Import 注解可以用来导入其他配置类。另外,你也可以使用 @ComponentScan 注解自动收集所有的Spring组件,包括 @Configuration 类。
如果你绝对需要使用基于XML的配置,我们建议你仍旧从一个 @Configuration 类开始。
你可以使用附加的 @ImportResource 注解加载XML配置文件。
@Configuration注解该类,等价 与XML中配置beans;用@Bean标注方法等价于XML中配置bean