Spring中的aware接口

Spring中有很多继承于aware中的接口,这些接口到底是做什么用到的

 

 

aware,翻译过来是知道的,已感知的,意识到的,所以这些接口从字面意思应该是能感知到所有Aware前面的含义。

先举个BeanNameAware的例子,实现BeanNameAware接口,可以让该Bean感知到自身的BeanName(对应Spring容器的BeanId属性)属性,举个例子:

  • BeanNameAware接口的定义
  • public interface BeanNameAware extends Aware {
          void setBeanName(String name);
    }
  • 定义两个User,一个实现BeanNameAware,一个不实现。
    package com.github.jettyrun.springinterface.demo.aware.beannameaware;
    
    import org.springframework.beans.factory.BeanNameAware;
    
    /**
     * Created by jetty on 18/1/31.
     */
    public class User implements BeanNameAware{
    
        private String id;
    
        private String name;
    
        private String address;
    
        public void setBeanName(String beanName) {
            //ID保存BeanName的值
            id=beanName;
        }
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "id='" + id + '\'' +
                    ", name='" + name + '\'' +
                    ", address='" + address + '\'' +
                    '}';
        }
    }
    package com.github.jettyrun.springinterface.demo.aware.beannameaware;
    
    import org.springframework.beans.factory.BeanNameAware;
    
    /**
     * Created by jetty on 18/1/31.
     */
    public class User2 {
    
        private String id;
    
        private String name;
    
        private String address;
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "id='" + id + '\'' +
                    ", name='" + name + '\'' +
                    ", address='" + address + '\'' +
                    '}';
        }
    }
  • 在Spring配置文件中初始化两个对象。
    1 <bean id="zhangsan"  class="com.github.jettyrun.springinterface.demo.aware.beannameaware.User">
    2         <property name="name" value="zhangsan"></property>
    3         <property name="address" value="火星"></property>
    4     </bean>
    5 
    6     <bean id="lisi"  class="com.github.jettyrun.springinterface.demo.aware.beannameaware.User2">
    7         <property name="name" value="lisi"></property>
    8         <property name="address" value="火星"></property>
    9     </bean>
  • main方法测试一下BeanNameAware接口所起的作用。
    1  public static void main(String[] args) {
    2         ApplicationContext context = new ClassPathXmlApplicationContext("classpath:application-beanaware.xml");
    3 
    4         User user=context.getBean(User.class);
    5         System.out.println(String.format("实现了BeanNameAware接口的信息BeanId=%s,所有信息=%s",user.getId(),user.toString()));
    6 
    7         User2 user2=context.getBean(User2.class);
    8         System.out.println(String.format("未实现BeanNameAware接口的信息BeanId=%s,所有信息=%s",user2.getId(),user2.toString()));
    9     }
  • 运行结果
    1 实现了BeanNameAware接口的信息BeanId=zhangsan,所有信息=User{id='zhangsan', name='zhangsan', address='火星'}
    2 未实现BeanNameAware接口的信息BeanId=null,所有信息=User{id='null', name='lisi', address='火星'}

    能够看到,我们在实现了BeanNameAware的 User中,获取到了Spring容器中的BeanId(对应spring配置文件中的id属性),而没有实现BeanNameAwareUser2,则不能获取到Spring容器中的Id属性。

    所以BeanNameAware接口是为了让自身Bean能够感知到,获取到自身在Spring容器中的id属性。

    同理,其他的Aware接口也是为了能够感知到自身的一些属性。

转载于:https://www.cnblogs.com/lgjava/p/11537472.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值