【SpringBoot】⼗四、常见注解(场景及源码)⽬录
说明
⼀、引⽤值的注解
1. @Value
(1)应⽤场景
注解在字段。
读取配置⽂件中单个字段的值。
(2)代码举例
name: SpringBootDemo
上边yml配置⽂件,下边控制器⽅法获取打印
@Value("${spring.application.name}")
private String applicationName;
/**
* 登录
* <p>
*
* @param employeeDomain 员⼯实体类
* @return org.springframework.web.servlet.ModelAndView
* @author ZRH
* @date 2020-08-18
* @version 1.0.0
*/
@PostMapping(value = "/login")
public RestResultDTO<Object> login(@RequestBody EmployeeDomain employeeDomain, HttpSession session) {
log.info(applicationName);
return handleMessage(employeeService.checkAccount(employeeDomain, session)
, Attribute(CommonConstant.LOGIN_EMPLOYEE));
}
2. @ConfigurationProperties
(1)应⽤场景
注解在指定类,引⽤类⽤@Autowired。
读取配置⽂件中多个字段的值,映射到指定类(⽤prefix指定),记得setter注⼊,得写个setter⽅法。或者像我⽤@Data。(2)代码举例
host: "胖\t虎"
friend: '⼆\t狗'
/**
* 将配置⽂件中配置的每⼀个属性的值,映射到这个组件中
* @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置⽂件中相关的配置进⾏绑定;
* prefix = "dog":配置⽂件中哪个下⾯的所有属性进⾏⼀⼀映射
*
* 只有这个组件是容器中的组件,才能使⽤容器提供的@ConfigurationProperties功能;
* @author ZRH
* @version 1.0.0
* @date 2020/9/1
*/
@Data
@Component
@ConfigurationProperties(prefix = "dog")
public class DogDomain {
private String name;
private String host;
private String friend;
}
/**
* 测试
*
* @author ZRH
* @version 1.0.0
* @date 2020/8/31
*/
@RestController
@RequestMapping
public class MyController {
@Autowired
private DogDomain dogDomain;
@GetMapping("/index")
public ModelAndView goIndex(ModelAndView modelAndView) {
System.out.println(dogDomain);
modelAndView.setViewName("index");
return modelAndView;
}
}
3. @AliasFor
(1)应⽤场景
(2)代码举例
像@ComponentScan
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Documented
@Repeatable(ComponentScans.class)
public @interface ComponentScan {
@AliasFor("basePackages")
String[] value() default {};
@AliasFor("value")
String[] basePackages() default {};
// ...
}
互为别名,value和basePackages作⽤就⼀样了。这样的话,如果我们只需要指定basePackages,就可以使⽤value属性代替(还可以省略value):@ComponentScan("com.winrh")。⽽多个属性时,可以定义@ComponentScan(basePackages = "com.winrh", lazyInit = true),这样条理更加清晰。
像@SpringBootApplication
public @interface SpringBootApplication {
@AliasFor(
annotation = EnableAutoConfiguration.class
)
Class<?>[] exclude() default {};
@AliasFor(
annotation = EnableAutoConfiguration.class
)
String[] excludeName() default {};
@AliasFor(
annotation = ComponentScan.class,
attribute = "basePackages"
)
String[] scanBasePackages() default {};
@AliasFor(
annotation = ComponentScan.class,
attribute = "basePackageClasses"
)
Class<?>[] scanBasePackageClasses() default {};
Class<?>[] scanBasePackageClasses() default {};
@AliasFor(
annotation = ComponentScan.class,
attribute = "nameGenerator"
)
Class<? extends BeanNameGenerator> nameGenerator() default BeanNameGenerator.class;
@AliasFor(
annotation = Configuration.class
)
boolean proxyBeanMethods() default true;
}
就⽤了@ComponentScan、@EnableAutoConfiguration、@Configuration的属性。再通过
⼆、使⽤功能的注解
1. @Slf4j
(1)应⽤场景
注解在类上。
springboot aop使⽤⽇志,这⾥⽇志抽象层⽤slf4j,具体的⽇志看你配置。配合lombok,可以省去⾃⼰创建Logger对象,直接调⽤log对象即可。(2)代码举例
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论