spring全注解-属性赋值

  • 使用@value赋值

    • 基本数值

    • 可以写sp el #{}

    • 可以写${}取出配置文件中的值即peoperties中的值

          @Value("feifei")
          private String name;
          @Value("#{20-2}")
          private  Integer age;
          @Value("${feifei.sex}")
          private String sex;
      同时要在配置类中引入资源文件的位置
          @PropertySource(value = {"classpath:test.properties"},encoding = "utf-8")
          出现乱码问题,可以在引入资源文件时,声明encoding来处理
      
    • 同样的在spring加载配置文件的时候同样的会把配置文件的属性加载进环境变量enviroment中,即从中也能获取属性值

Environment environment = context.getEnvironment();
String property = environment.getProperty("feifei.sex");
  • 自动装配@Autowired

    • spring利用DI即依赖注入,完成对ioc容器中各个组件的依赖关系的赋值
    • 一个组件利用到另一个组件,默认优先按照类型去容器中寻找对应的组件,找到就赋值
    • 如果该类型的组件在容器中有多个,就是用名字
    • 也可以使用@Qualifier指定装配的组件的id,而不是使用默认的属性名字
    • 如果容器中没有任何类型的该组件就会报错,自动装配默认一定要将属性赋值好
    • @Autowired(required=false)就会再如果容器中没有任何类型的该组件就会默认为null而不是报错
  • @Primary 让spring进行自动装配时优先使用被注解备注的bean,此时还需要使用别的组件进行自动装配则同样使用@Qualifier

  • spring还支持@resource(jsr250)和@injet(jsr330)【java规范】

    • @resource可以和@Autowired一样进行自动装配,但默认的按名称装配,也没有required的功能
  • @Autowired标注的位置属性 方法 构造器

    • 标注在方法上,spring创建当前对象就会调用方法进行赋值,方法的参数,会从ioc容器中寻找
    • 默认加载ioc容器中的组件,容器启动会调用无参构造器创建对象,在进行初始化赋值等的操作
    • 标在构造器上,就会调用有参构造器,参数也是从ioc容器中获取组件的值,如果组件只有一个有参构造器,有参构造器的@Autowired 还是可以自动从容器中获取
  • 自定义组件,想要使用spring容器底层的一些组件(applicationcontext、beanfactory)

    • 自定义组件实现xxxaware,在创建对象的时候,会调用接口规定的方法注入相关组件
    • 主要是aware接口,aware本意为感知到的、意识到的
    @Component
    public class feifei implements BeanNameAware {
       private String name;
        public void setBeanName(String s) {
            this.name=s;
        }
        public String getName() {
            return name;
        }
    }
    此时在容器中的bean就可以输出自己的bean的名字啦
    
    • xxxaware:功能都是使用xxxprocessor
    • 创建完bean之后发现bean实现了xxxaware接口就会给我们传进来,简单来说就是接口回调

你可能感兴趣的:(spring系列,spring,java)