Spring中的aware接口详情(spring aware)

网友投稿 353 2022-07-29


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 + WmkwrXK'\'' +

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

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()));

}

运行结果:

实现了BeaWmkwrXKnNameAware接口的信息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对象。


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

上一篇:Java字符串编码解码性能提升的技巧分享(java对字符串编码)
下一篇:springboot+redis实现微博热搜排行榜的示例代码(2018微博热搜榜)
相关文章

 发表评论

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