Spring中有很多继承于 aware 中的接口,这些接口到底是做什么用到的。
aware ,翻译过来是知道的,已感知的,意识到的,所以这些接口从字面意思应该是能感知到所有 Aware 前面的含义。
先举个 BeanNameAware 的例子,实现 BeanNameAware 接口,可以让该 Bean 感知到自身的 BeanName (对应Spring容器的 BeanId 属性)属性,举个例子:
BeanNameAware接口的定义:
|
1 2 3 |
public interface BeanNameAware extends Aware { void setBeanName(String name); } |
定义两个 User ,一个实现 BeanNameAware ,一个不实现。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
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 + '\ '' + '}' ; } } |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
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 2 3 4 5 6 7 8 9 |
< 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 接口所起的作用。
|
1 2 3 4 5 6 7 8 9 |
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中的aware接口详情的文章就介绍到这了,更多相关aware接口内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
原文链接:https://HdhCmsTestjianshu测试数据/p/c5c61c31080b
查看更多关于Spring中的aware接口详情的详细内容...