栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring注解驱动开发(三)—— Bean属性赋值

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring注解驱动开发(三)—— Bean属性赋值

赋值方式
  1. 使用@Value
    1. 基础数值
    2. 可以使用SpEL表达式“#{20-2}”
    3. 可以使用${};取出@PropertySource() 指定的属性文件值(即在运行环境变量的值)
自动装配

自动装配;Spring利用依赖注入(DI),完成对IOC容器中中各个组件的依赖关系赋值;

  1. @Autowired:自动注入:

    1. 默认优先按照类型去容器中找对应的组件:applicationContext.getBean(BookDao.class);

    2. 如果找到多个相同类型的组件,再将属性的名称作为组件的id去容器中查找applicationContext.getBean(“beanName”)

    3. @Qualifier(“beanName”):使用@Qualifier指定需要装配的组件的id,而不是使用属性名|

    4. 自动装配:默认一定要将属性复制好,否则就会报错

      @Autowired(required=false)设置为非必须,

    5. @Primary:让Spring进行自动装配的时候,默认使用首选的bean;

      也可以继续使用@Qualifier指定需要装配的bean的名字

      BookService{
      @Autowired
      BookDao bookDao;
      }

  2. Spring还支持使用@Resource(JSR25e)和@Inject(JSR33e)[java规范的注解]
    @Resource:可以和@Autowired一样实现自动装配功能;默认是按照组件名称进行装配的;没有能支持@Primary功能没有支持@Autowired(reqiured=false);
    @Inject:需要导入javax.inject的包,和Autowired的功能一样。没有required=false的功能;

@Autowired:Spring定义的;@Resource、@Inject都是java规范

AutowiredAnnotationBeanPostProcessor:解析完成自动装配功能;

3)@Autowired:构造器,参数,方法,属性;都是从容器中获取参数组件的值

  1. 标注在方法位置:Spring容器创建当前对象,就会调用方法,完成方法的参数赋值;
    @Bean标注的方法创建对象的时候,方法参数的值从容器中获取;@Bean+方法参数,默认不写@Autowired

  2. 标注在构造器:默认加在ioc容器中的组件,容器启动会调用无参构造器创建对象,再进行初始化赋值等操作
    如果组件只有一个有参构造器,这个有参构造器的@Autowired可以省略,参数位置的组件可以从Ioc容器中自动获取

  3. 标注在参数位置:

  4. 自定义组件想要使用Spring容器底层的一些组件(ApplicationContext,BeanFactory,xxx)
    自定义组件需要实现xxxAware;在创建对象的时候,会调用接口规定的方法注入相关组件;Aware
    把Spring底层一些组件注入到自定义的Bean中;
    xxxAware:功能使用xxxProcessor实现的;

    ​ ApplicationContextAware==》ApplicationContextAwareProcessor;

@Profile使用

@Profile:指定组件在哪个环境的情况下才能被注册到容器中,不指定,任何环境下都能注册这个组件

  1. 加了环境标识的bean,只有这个环境被激活的时候才能注册到容器中。默认是default环境
  2. 写在配置类上,只有是指定的环境的时候,整个配置类里面的所有配置才能开始生效
  3. 没有标环境标识的bean,同时在类上也没有指定环境,在任何环境下都是加载的;

指定环境标识的方式:

  1. 使用命令行动态参数:在虚拟机参数位置加载-Dspring.profiles.active=test

  2. 代码的方式激活某种环境;

    @Test
    public void testel(){
       AnnotationConfigApplicationContext applicationContext=
       new AnnotationConfigApplicationcontext();
       //1、创建一个applicationcontext
       //2、设置需要激活的环境
       applicationContext.getEnvironment().setActiveProfiles("de");
       //3、注册主配置类
       applicationContext.register(MainConfigofProfile.class);
       //4、启动刷新容器
       applicationContext.refresh();
    	...
    }
    
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/284749.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号