文档章节

Spring4 实战 总结

吹比龙
 吹比龙
发布于 2019/02/26 21:50
字数 523
阅读 124
收藏 0

1、加载自定义资源文件

@PropertySource注解
官方介绍,与@configuration类一起使用

例子1

 @Configuration
 @PropertySource("classpath:/com/myco/app.properties")
 public class AppConfig {
     @Autowired
     Environment env;

     @Bean
     public TestBean testBean() {
         TestBean testBean = new TestBean();
         testBean.setName(env.getProperty("testbean.name"));
         return testBean;
     }
 }

2、优雅的空Springbean依赖实例判断

指定一个被注入的bean可能为空

方式1

   @Autowired(required =false)
    UserService userService;

    @PostMapping
    public SucessJsonResult<Void> add(@RequestBody User user) {
        // 判断非空
        if(userService != null) {
            userService.save(user);  
        }
        return new SucessJsonResult<>();
    }

方式2

    @Autowired
    Optional<UserService> userService;

    @PostMapping
    public SucessJsonResult<Void> add(@RequestBody User user) {
        // 判断非空
        if(userService.isPresent()) {
            userService.get().save(user);  
        }
        return new SucessJsonResult<>();
    }

3、泛型依赖注入

4、接口多实现依赖注入

方式一 MAP

key是bean的名字,value是实现了接口的bean

如:

{copyOfUserServiceImpl=com.iflytek.icourt.service.impl.CopyOfUserServiceImpl@5c8fd2da, userServiceImpl=com.iflytek.icourt.service.impl.UserServiceImpl@198d572f}

  @Autowired
    Map<String,UserService> userServiceMap;

    @PostMapping
    public SucessJsonResult<Void> add(@RequestBody User user) {
        userServiceMap.get("copyOfUserServiceImpl").save(user);
        return new SucessJsonResult<>();
    }

方式二 List

    @Autowired
    List<UserService> userServiceMap;

    @PostMapping
    public SucessJsonResult<Void> add(@RequestBody User user) {
        userServiceMap.get(0).save(user);
        return new SucessJsonResult<>();
    }

接口bean实现类的顺序可以通过用@Order注解或者Ordered接口来实现排序

@Order(100)
@Service
@Transactional
public class UserServiceImpl extends AbstractService<User> implements UserService {

5、@Lazy延迟依赖注入

6、@Conditional条件注解

@Conditional注解是可以根据一些自定义的条件动态的选择是否加载该bean到springIOC容器中去

@Conditional源码你会发现它既可以作用在方法上,同时也可以作用在

允许自定义规则,判断是否创建bean

@Profile注解就是依据@Conditional开发的

condition验证时机如下

    com.iflytek.icourt.util.UtilAll.currentStackTrace(UtilAll.java:24)
    com.iflytek.icourt.study.spring.condition.LLiProfileCondition.matches(LLiProfileCondition.java:23)
    org.springframework.context.annotation.ConditionEvaluator.shouldSkip(ConditionEvaluator.java:102)
    org.springframework.context.annotation.ConditionEvaluator.shouldSkip(ConditionEvaluator.java:81)
    org.springframework.context.annotation.ConditionEvaluator.shouldSkip(ConditionEvaluator.java:64)
    org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.isConditionMatch(ClassPathScanningCandidateComponentProvider.java:371)
    org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.isCandidateComponent(ClassPathScanningCandidateComponentProvider.java:355)
    org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:288)
    org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:272)
    org.springframework.context.annotation.ComponentScanAnnotationParser.parse(ComponentScanAnnotationParser.java:135)
    org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:287)
    org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:245)
    org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:198)
    org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:167)
    org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:308)
    org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:228)
    org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:272)
    org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:92)
    org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:687)
    org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:525)
    org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
    org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693)
    org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360)
    org.springframework.boot.SpringApplication.run(SpringApplication.java:303)
    org.springframework.boot.SpringApplication.run(SpringApplication.java:1118)
    org.springframework.boot.SpringApplication.run(SpringApplication.java:1107)
    com.iflytek.icourt.Application.main(Application.java:13)
 

 

测试类如下

 

7、@Profile 多环境判断注解

可以根据 dev test pro 环境判断哪些bean实例化,哪些配置生效

 

© 著作权归作者所有

吹比龙
粉丝 10
博文 135
码字总数 38713
作品 0
合肥
程序员
私信 提问
加载中

评论(0)

Spring Boot实战与原理分析

Spring Boot实战与原理分析 1:Spring Boot概述与课程概要介绍 2:Spring4 快速入门 3:Spring4 扩展分析(一) 4:Spring4 扩展分析(二) 5:Spring Boot 快速入门 6:Spring Boot 配置分析...

刘宗泽
2018/06/26
0
0
JDK8新特性之Optional

Optional是什么 Jdk8提供,一个可以包含null值的容器对象,可以用来代替xx != null的判断。 Optional常用方法 of 为value创建一个Optional对象,如果value为空则 会报出NullPointerExceptio...

java技术栈
2017/10/09
0
0
ImportSelector与DeferredImportSelector的区别(spring4)

版权声明:欢迎转载,请注明出处,谢谢。 https://blog.csdn.net/boling_cavalry/article/details/82555352 在使用@Import注解来注册bean的时候,Import注解的值可以是ImportSelector或者Def...

博陵精骑
2018/09/09
0
0
Spring4新特性——Web开发的增强

Spring4新特性——泛型限定式依赖注入 Spring4新特性——核心容器的其他改进 Spring4新特性——Web开发的增强 Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC Spring4新特性...

张升强
2014/04/02
158
0
J2EE中整合Spring4和hibernate4

J2EE中整合Spring4和hibernate4,在这我只给出初略的步骤了, 注:先单独搭建好Spring4和hibernate4之后再进行俩者的整合。 整体是这样,如下图(Spring.User.xml是专门为user模块准备的Sprin...

汉斯-冯-拉特
2016/04/23
82
0

没有更多内容

加载失败,请刷新页面

加载更多

北京哪里有开住宿费发票

电13564998196 陈生幵-真-嘌,百-分-百-真。-本报讯(劳动报记者陆燕婷)聚焦餐饮行业,58同城招聘研究院昨 发布数据显示,今年上半年,全国餐饮行业招聘需求增长46.18%,平均月薪6387元。随着...

票迦徴fp2090
5分钟前
11
0
北京哪里有开住宿费发票

电13564998196 陈生幵-真-嘌,百-分-百-真。-本报讯(劳动报记者陆燕婷)聚焦餐饮行业,58同城招聘研究院昨 发布数据显示,今年上半年,全国餐饮行业招聘需求增长46.18%,平均月薪6387元。随着...

嘌迦徴fp2090
5分钟前
13
0
北京哪里有开住宿费发票

电13564998196 陈生幵-真-嘌,百-分-百-真。-本报讯(劳动报记者陆燕婷)聚焦餐饮行业,58同城招聘研究院昨 发布数据显示,今年上半年,全国餐饮行业招聘需求增长46.18%,平均月薪6387元。随着...

嘌珈徴fp2090
6分钟前
11
0
北京哪里有开住宿费发票

电13564998196 陈生幵-真-嘌,百-分-百-真。-本报讯(劳动报记者陆燕婷)聚焦餐饮行业,58同城招聘研究院昨 发布数据显示,今年上半年,全国餐饮行业招聘需求增长46.18%,平均月薪6387元。随着...

票加徴fp2090
7分钟前
5
0
北京哪里有开住宿费发票

电13564998196 陈生幵-真-嘌-本报讯(劳动报记者陆燕婷)聚焦餐饮行业,58同城招聘研究院昨 发布数据显示,今年上半年,全国餐饮行业招聘需求增长46.18%,平均月薪6387元。随着餐饮行业的快速发...

嘌加徴fp2090
8分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部