Spring中的aware接口详情

网友投稿 262 2024-02-04


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配置文件中初始化两个对象:

<bean id="zhangsan" class="com.github.jettyrun.springinterface.demo.aware.beannameaware.User"> <property name="name" value="zhangsan"></property> <property name="address" value="火星"></property> </bean> <bean id="lisi" class="com.github.jettyrun.springinterface.demo.aware.beannameaware.User2"> <property name="name" value="lisi"></property> <property name="address" value="火星"></property> </bean> main方法测试一下BeanNameAware接口所起的作用。 public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("classpath:application-beanaware.xml"); User user=context.getBean(User.class); System.out.println(String.format("实现了BeanNameAware接口的信息BeanId=%s,所有信息=%s",user.getId(),user.toString())); User2 user2=context.getBean(User2.class); System.out.println(String.format("未实现BeanNameAware接口的信息BeanId=%s,所有信息=%s",user2.getId(),user2.toString())); }

运行结果:

实现了BeanNameAware接口的信息BeanId=zhangsan,所有信息=User{id=zhangsan, name=zhangsan, address=火星}

未实现BeanNameAware接口的信息BeanId=null,所有信息=User{id=null, name=lisi, address=火星}

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

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

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

比如实现了ApplicationContextAware接口的类,能够获取到ApplicationContext,实现了BeanFactoryAware接口的类,能够获取到BeanFactory对象。

关于Spring

Java编程技术

技术模拟思路:采用26个英文字母来实现排行,随机为每个字母生成一个随机数作为score为了更好的体验,先做几件事:先初始化1个月的历史数据定时5秒钟,模拟微博的热度刷 ...


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:为什么枚举要实现接口?
下一篇:java 单机接口限流处理方案
相关文章

 发表评论

暂时没有评论,来抢沙发吧~