Spring中的aware接口詳情
Spring中有很多繼承于aware中的接口,這些接口到底是做什么用到的。

aware,翻譯過來是知道的,已感知的,意識到的,所以這些接口從字面意思應(yīng)該是能感知到所有Aware前面的含義。
先舉個BeanNameAware的例子,實現(xiàn)BeanNameAware接口,可以讓該Bean感知到自身的BeanName(對應(yīng)Spring容器的BeanId屬性)屬性,舉個例子:
BeanNameAware接口的定義:
public interface BeanNameAware extends Aware {
void setBeanName(String name);
}定義兩個User,一個實現(xiàn)BeanNameAware,一個不實現(xiàn)。
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("實現(xiàn)了BeanNameAware接口的信息BeanId=%s,所有信息=%s",user.getId(),user.toString()));
User2 user2=context.getBean(User2.class);
System.out.println(String.format("未實現(xiàn)BeanNameAware接口的信息BeanId=%s,所有信息=%s",user2.getId(),user2.toString()));
}運行結(jié)果:
實現(xiàn)了BeanNameAware接口的信息BeanId=zhangsan,所有信息=User{id='zhangsan', name='zhangsan', address='火星'}
未實現(xiàn)BeanNameAware接口的信息BeanId=null,所有信息=User{id='null', name='lisi', address='火星'}
能夠看到,我們在實現(xiàn)了BeanNameAware的 User中,獲取到了Spring容器中的BeanId(對應(yīng)spring配置文件中的id屬性),而沒有實現(xiàn)BeanNameAware的User2,則不能獲取到Spring容器中的Id屬性。
所以BeanNameAware接口是為了讓自身Bean能夠感知到,獲取到自身在Spring容器中的id屬性。
同理,其他的Aware接口也是為了能夠感知到自身的一些屬性。
比如實現(xiàn)了ApplicationContextAware接口的類,能夠獲取到ApplicationContext,實現(xiàn)了BeanFactoryAware接口的類,能夠獲取到BeanFactory對象。
到此這篇關(guān)于Spring中的aware接口詳情的文章就介紹到這了,更多相關(guān)aware接口內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java字符編碼原理(動力節(jié)點Java學(xué)院整理)
Java開發(fā)中,常常會遇到亂碼的問題,一旦遇到這種問題,常常比較煩惱,大家都不想承認是自己的代碼問題,其實搞明白編碼的本質(zhì)過程就簡單多了,接下來小編給大家?guī)韏ava字符編碼原理,要求看看吧2017-04-04
java四種引用及在LeakCanery中應(yīng)用詳解
這篇文章主要介紹了java四種引用及在LeakCanery中應(yīng)用,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-09-09

