SpringMVC-常用注解(配置相关)

1.@Configuration注解

从Spring3.0 @Configuration注解用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。源码如下:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Configuration {
    String value() default "";
}

从源码定义来看,@Configuration 注解本质上还是@Component,因此< context:component-scan/> 或者 @ComponentScan注解都能处理@Configuration注解的类。@Configuration标注在类上,相当于把该类作为spring的xml配置文件中的< beans>标签,作用为:配置spring容器(应用上下文)
在springboot项目中建立dbconfig类

package com.soft.fire.config;

import org.springframework.context.annotation.Configuration;

/**
 * 数据库配置
 *
 * @author David Lin
 * @version: 1.0
 * @date 2019-03-10 11:53
 */
@Configuration
public class DbConfig {

    public DbConfig(){
        System.out.println("dbconfig 启动初始化了 !!!----------------------");
    }
}

启动项目之后 控制台日志如下:
在这里插入图片描述
相当于xml配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd">


</beans>
2.@Bean注解

用来向容器注册一个bean,@Bean是一个方法级别上的注解,主要用在@Configuration注解的类里,也可以用在@Component注解的类里。Bean的类型由方法返回值类型决定,名称默认和方法名相同,也可以通过入参显示指定Bean名称。源码如下:

@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Bean {
    @AliasFor("name")
    String[] value() default {};

    @AliasFor("value")
    String[] name() default {};

    Autowire autowire() default Autowire.NO;

    String initMethod() default "";

    String destroyMethod() default "(inferred)";
}

(1)通过@Configuration+@Bean注册Bean,如下:

@Configuration
public class DbConfig {

    public  DbConfig(){
        System.out.println(" dbconfig  启动初始化!!---------------");
    }

    @Bean
    public Person person(){
        return new Person();
    }
}

在Controller中注入Person对象进来使用person,ide使用lombok插件和依赖

@Data
public class Person {

    private String name = "smith";

    private int age = 23;


}
@Controller
@RequestMapping("/common")
public class CommonController {

    @Resource
    private Person person;

    @GetMapping("/person")
    @ResponseBody
    private Person getPerson(HttpServletRequest request){
        return person;
    }

访问结果如下:
在这里插入图片描述
(2)使用@Configuration+@Component注册Bean

@Configuration
@ComponentScan(basePackages = "com.soft.core.model")
public class DbConfig {

    public  DbConfig(){
        System.out.println(" dbconfig  启动初始化!!---------------");
    }

   /* @Bean
    public Person person(){
        return new Person();
    }*/
}

@Data
@Component
public class Person {

    private String name = "smith";

    private int age = 23;


}

Controller访问运行结果和第一种是一样的。
通过@Configuration和@Bean注解注册的实体,适合在需要注入第三方类库的时候使用。将第三方类库设置自定义属性值之后 再注册到容器里面 ,可以注入到需要的地方。

3.@ComponentScan注解

@ComponentScan主要就是定义扫描的路径从中找出标识了需要装配的类自动装配到Spring的bean容器中。

  • @Configuation等价于XML配置的< beans></ beans>标签
  • @Bean等价于XML配置的 < bean></ bean>标签
  • @ComponentScan等价于<context:component-scan base-package=“com.soft.xxx.xxx” />标签
4.@Value注解

该注解的作用是将我们配置文件的属性读出来,有@Value(“${}”)和@Value(“#{}”)两种方式。如果要在Spring MVC 中使用该注解,需要在mvc配置文件中添加相应的配置。因为还有一个applicationContext配置文件。在Controller中使用@Value注解如下:
my.properties文件

my.name=大卫
my.age = 23岁
my.sex = 男

spring-servlet.xml配置如下

<context:property-placeholder location="classpath:conf/*.properties"/>

Controller代码如下:

@Controller
@RequestMapping("/common")
public class CommonController {

    @Value("${my.name}")
    private String userName;

    @GetMapping("/user")
    @ResponseBody
    public String getUserName(){
        return userName;
    }

访问结果如下:
在这里插入图片描述

5.@ConfigurationProperties注解

该注解需要在Spring Boot环境中使用。该注解将自定义的properties文件映射到实体bean中。Spring Boot默认使用yml中的配置,但有时候要用传统的xml或properties配置,就需要依赖spring-boot-configuration-processor:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-configuration-processor</artifactId>
	<optional>true</optional>
</dependency>

(1)如果该注解加在类上需要和@Component注解一起使用
application.properties内容如下:

server.port=8888
server.servlet.context-path=/
server.tomcat.uri-encoding=utf-8

jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:ORCL
jdbc.username=scott
jdbc.password=tiger

JdbcConfig类

/**
 * 数据库相关配置
 *
 * @author David Lin
 * @version: 1.0
 * @date 2019-03-10 20:47
 */
@Component
@ConfigurationProperties(prefix = "jdbc")
@Setter
@Getter
public class JdbcConfig {
    /**
     * 驱动类名称
     */
    private String driverClassName;
    /**
     * 数据库地址
     */
    private String url;
    /**
     * 数据库账号
     */
    private String username;
    /**
     * 数据库密码
     */
    private String password;
}

将配置类注入到Controller类里面使用

@RestController
public class CommonController {

    @Resource
    private JdbcConfig jdbcConfig;

    @GetMapping("/jdbc")
    public JdbcConfig getJdbcConfig(HttpServletRequest request){
        return jdbcConfig;
    }

访问结果如下:
在这里插入图片描述
(2)如果该注解加在方法上需要和@Bean注解一起使用
定义一个JdbcProperties类

/**
 * 数据库属性对象
 *
 * @author David Lin
 * @version: 1.0
 * @date 2019-03-10 21:42
 */
@Setter
@Getter
public class JdbcProperties {

    /**
     * 驱动类名称
     */
    private String driverClassName;
    /**
     * 数据库地址
     */
    private String url;
    /**
     * 数据库账号
     */
    private String username;
    /**
     * 数据库密码
     */
    private String password;
}

@Configuration
public class JdbcConfig {

//或者把该方法放在启动类里面也是可以的
    @Bean
    @ConfigurationProperties(prefix = "jdbc")
    public JdbcProperties jdbcProperties(){
        return new JdbcProperties();
    }

}
@RestController
public class CommonController {

    @Resource
    private JdbcProperties jdbcProperties;

    @RequestMapping("/jdbc")
    public JdbcProperties getJdbcProperties(HttpServletRequest request){
        return jdbcProperties;
    }

运行结果如下:
在这里插入图片描述

6.@PropertySource注解

该注解用来指定要读取的配置文件的路径,从而读取这些配置文件,可以同时指定多个配置文件,通常和@Value、@Component注解一起使用。功能和< context:property-placeholder location=“classpath:conf/*.properties”/>一样。在非Spring Boot环境中,将属性配置封装到实体对象里面。

/**
 * 数据库配置
 *
 * @author David Lin
 * @version: 1.0
 * @date 2019-03-10 11:04
 */
@Component
@PropertySource(value = "classpath:conf/jdbc.properties")
@Setter
@Getter
public class DbConfig {

    /**
     * 驱动类名称
     */
    @Value("${jdbc.driverClassName}")
    private String driverClassName;
    /**
     * 数据库地址
     */
    @Value("${jdbc.url}")
    private String url;
    /**
     * 数据库账号
     */
    @Value("${jdbc.username}")
    private String username;
    /**
     * 数据库密码
     */
    @Value("${jdbc.password}")
    private String password;

}
@Controller
@RequestMapping("/common")
public class CommonController {

    @Resource
    private DbConfig dbConfig;

    @Value("${my.name}")
    private String userName;

    @GetMapping("/user")
    @ResponseBody
    public String getUserName(){
        return userName;
    }

    @GetMapping("/jdbc")
    @ResponseBody
    public DbConfig getConfig(HttpServletRequest request){
        return dbConfig;
    }

访问结果如下:
在这里插入图片描述

1.这几篇作者写的不错,放在这里参考引用: springmvc零XML配置.
spring boot2配置: spring boot2 配置.
Spring:Value取不到值.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值