Controller

声明此类事一个MVC类,通常与@RequestMapping一起使用

Service

声明此类是一个业务处理类,标注在类上,而不是接口上

Component

通用注解类,业务无法明确划分或不能归类清晰时,对该功能进行组件封装,并希望交给 IOC 管理, 这时候用@component 注解。

ResController

开发rest api

responseBody

@responseBody作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML.
http://localhost:8080/responsebody

  1. @ResponseBody
  2. @RequestMapping("/responseBody")
  3. public String responseBody(){
  4. return "hello springmvc";
  5. }

RequestParam

把请求中的指定名称的参数传递给控制器中形参赋值
属性:
value:请求参数中的名称
required:请求参数中是否必须提供此参数,默认值是true,表示必填参数
defaultValue:默认值,如果设置了该值,required 将自动设为 false,无论你是否配置了 required,配置了什么值,都是 false(可选配置)

  1. @ResponseBody
  2. @RequestMapping("/param")
  3. public String requestParam(@RequestParam(value = "id",required = false) String userId){
  4. return "hello"+userId;
  5. }

表示 http://ip:端口/param?id=111

RequestBody

获取请求参数提的内容,由于get方法没有body 所有get不可以使用,
属性 required:是否必须有请求体,默认值是true

  1. @ResponseBody
  2. @RequestMapping(value = "/requestBody",method = RequestMethod.POST)
  3. public String requestBody(@RequestBody String body){
  4. return body;
  5. }

curl 测试请求Post

  1. curl -X POST http://localhost:8080/requestBody \
  2. -H 'Content-Type: application/json' \
  3. -d '{"uid":12}'

PathVariable

拥有绑定url中的占位符的。/delete/{id},{id}就是占位符
属性 value:指定url中的占位符名称
http://localhost:8080/user/1100

  1. @ResponseBody
  2. @RequestMapping(value = "/user/{id}")
  3. public String request(@PathVariable("id") String id){
  4. return "uid:"+id;
  5. }

RequestHeader

获取指定请求头的值
属性 value:请求头的名称

  1. @ResponseBody
  2. @RequestMapping(value = "/lang")
  3. public String requestHead(@RequestHeader("accept-language") String lang){
  4. return lang;
  5. }
  1. curl -X GET http://localhost:8080/lang \
  2. -H 'Accept-Language: zh-CN' \

CookieValue

获取指定cookie的名称的值
属性 value:cookie的名称
http://localhost:8080/cookie

  1. @ResponseBody
  2. @RequestMapping(value = "/cookie")
  3. public String requestCookie(@CookieValue("JSESSIONID") String cookie){
  4. return cookie;
  5. }

ModelAttribute

  1. 出现在方法上:表示当前方法会在控制器方法执行前线执行。
  2. 出现在参数上:获取指定的数据给参数赋值。
    应用场景:
    1当提交表单数据不是完整的实体数据时,保证没有提交的字段使用数据库原来的数据。
    2修饰的方法没有返回值
  3. SessionAttributes
    多次执行控制器方法间的参数共享
    属性1. value:指定存入属性的名称

@Configuration

用于指定当前类是一个 spring 配置类,当创建容器时会从该类上加载注解。获取容器时需要使用AnnotationApplicationContext(有@Configuration 注解的类.class)。当注解的配置类作为AnnotationConfigApplicationContext对象创建的参数时,该注解可以省略

  1. ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfiguration.class);

属性:value:用于指定配置类的字节码

@ComponentScan

用于指定 spring 在初始化容器时要扫描的包。作用和在 spring 的 xml 配置文件中的:是一样的。
属性:basePackages:用于指定要扫描的包。和该注解中的 value 属性作用一样。

@Bean

该注解只能写在方法上,用于把当前方法的返回值放入spring的IOC容器中。如果注解的方法有参数的时,spring框架回去容器中查找有没有可以匹配的bean对象,与Autowired注解的作用是一样的
属性:name 指定当前bean的id,默认值是当前方法的名称。
xml配置文件

  1. <context:component-scan base-package="com.bx"></context:component-scan>
  2. <bean id="runner" class="org.apache.commons.dbutils.QueryRunner" scope="prototype">
  3. <constructor-arg name="ds" ref="dataSource">
  4. </constructor-arg>
  5. </bean>
  6. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
  7. <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
  8. <property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/demo?characterEncoding=utf-8"></property>
  9. <property name="user" value="root"></property>
  10. <property name="password" value="baxiang"></property>
  11. </bean>

转换成注解

  1. @Configuration
  2. @ComponentScan(basePackages = "com.bx")
  3. public class SpringConfiguration {
  4. @Bean(name = "runner")
  5. public QueryRunner createQueryRunner(DataSource dataSource){
  6. return new QueryRunner(dataSource);
  7. }
  8. @Bean("datasource")
  9. public DataSource createDataSource(){
  10. try {
  11. ComboPooledDataSource ds = new ComboPooledDataSource();
  12. ds.setDriverClass("com.mysql.jdbc.Driver");
  13. ds.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/demo?characterEncoding=utf-8");
  14. ds.setUser("root");
  15. ds.setPassword("baxiang");
  16. return ds;
  17. }catch (Exception e){
  18. e.printStackTrace();
  19. }
  20. return null;
  21. }
  22. }

Value

@Value 是获取 application.properties 中的配置信息,例如 application.properties 中有相关

@PropertySource

用于加载 .properties 文件中的配置 。配置数据源时,可以把连接数据库的信息写到properties 配置文件中,就可以使用此注解指定 properties 配置文件的位置。
属性:value[]:用于指定 properties 文件位置。如果是在类路径下,需要写上 classpath
jdbcConfig.properties

  1. jdbc.driver=com.mysql.jdbc.Driver
  2. jdbc.url=jdbc:mysql://127.0.0.1:3306/demo?characterEncoding=utf-8
  3. jdbc.user=root
  4. jdbc.password=baxiang

设置@PropertySource注解 需要设置classpath

  1. @Configuration
  2. @PropertySource("classpath:jdbcConfig.properties")
  3. public class JdbcConfig {
  4. @Value("${jdbc.driver}")
  5. private String driver;
  6. @Value("${jdbc.url}")
  7. private String url;
  8. @Value("${jdbc.user}")
  9. private String username;
  10. @Value("${jdbc.password}")
  11. private String password;
  12. @Bean("datasource")
  13. public DataSource createDataSource(){
  14. try {
  15. ComboPooledDataSource ds = new ComboPooledDataSource();
  16. ds.setDriverClass(driver);
  17. ds.setJdbcUrl(url);
  18. ds.setUser(username);
  19. ds.setPassword(password);
  20. return ds;
  21. }catch (Exception e){
  22. e.printStackTrace();
  23. throw new RuntimeException(e);
  24. }
  25. }
  26. }

@Import

用于导入其他配置类,在引入其他配置类时,可以省略@Configuration 注解。
属性:value[]:用于指定其他配置类的字节码。当我们使用Import的注解之后,有Import注解的类就是父配置类,而导入的都是子配置类

  1. @Import(xxxx.class)

参考

https://docs.spring.io/spring-javaconfig/docs/1.0.0.M4/reference/html/ch02s02.html