SpringIOC的一个小例子 有一处不明白

m11418166 2017-12-13 02:23:16

package com.jike.spring.chapter01;
//接口
public interface IHelloMessage {

public String sayHello();
}




package com.jike.spring.chapter01;

public class HelloChina implements IHelloMessage {

@Override
public String sayHello() {
return "大家好";
}

}



package com.jike.spring.chapter01;

public class HelloWorld implements IHelloMessage {

@Override
public String sayHello() {
return "Hello World!";
}

}



package com.jike.spring.chapter01;

public class Person {

//因为Person类需要引用 IHelloMessage 所以要把IHelloMessage写成一个属性
private IHelloMessage helloMessage;

public IHelloMessage getHelloMessage() {
return helloMessage;
}

public void setHelloMessage(IHelloMessage helloMessage) {
this.helloMessage = helloMessage;
}

public String sayHello(){
return this.helloMessage.sayHello(); //调用IHelloMessage这个接口来输出问候信息
}
}




package com.jike.spring.chapter01;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;


public class Main {


public static void main(String[] args) {
//利用FileSystemResource 来读取配置文件
Resource r = new FileSystemResource("helloMessage.xml");
//使用XmlBeanFactory来加载配置文件 启动IOC容器
BeanFactory f = new XmlBeanFactory(r);
//从IOC容器中获取Person类的实例
Person lizi = (Person)f.getBean("chaoji");
//需要用Person实例来输出问候信息
String s = lizi.sayHello();
System.out.println(s);
}

}



<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
<bean id = "helloWorld" class = "com.jike.spring.chapter01.HelloWorld">
</bean>

<bean id = "helloChina" class = "com.jike.spring.chapter01.HelloChina">

</bean>

<bean id = "chaoji" class = "com.jike.spring.chapter01.Person">
<property name = "helloMessage" ref = "helloWorld">
</property>
</bean>
</beans>


这个例子的意思是 让一个人 在国内的时候说中文 大家好 在国外说helloworld 很简单的SpringIOC 小例子
但是有一点不明白 Person类中的 return this.helloMessage2.sayHello(); 这句话不明白 这句话的目的是什么啊 为什么要写这句话。
...全文
175 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
vswen5 2017-12-13
  • 打赏
  • 举报
回复
xml 里面写的是将类构造的意思 Person lizi = new Person();和你Person lizi = (Person)f.getBean("chaoji");是一个意思 所以先从基础开始学 框架的那些配置才知道是什么意思
  • 打赏
  • 举报
回复
public String sayHello(){ return this.helloMessage.sayHello(); } 等价于---》 public String sayHello(){ return helloMessage.sayHello(); } 其中this 代表了Person 的对象
m11418166 2017-12-13
  • 打赏
  • 举报
回复
引用 1 楼 lye2000000_super 的回复:
helloMessage2?这个是什么? public String sayHello(){ return this.helloMessage.sayHello(); } 是说的这个吗?因为helloMessage是不确定的,只要是实现了IHelloMessage接口的类都可以。所以根据你设置的helloMessage的对象返回不同的内容。
引用 1 楼 lye2000000_super 的回复:
helloMessage2?这个是什么? public String sayHello(){ return this.helloMessage.sayHello(); } 是说的这个吗?因为helloMessage是不确定的,只要是实现了IHelloMessage接口的类都可以。所以根据你设置的helloMessage的对象返回不同的内容。
这个明白了 能麻烦看下我四楼的问题吗 那个写法不太明白 谢谢了
m11418166 2017-12-13
  • 打赏
  • 举报
回复
引用 2 楼 vswen5 的回复:
因为你有两个类都实现了同一个接口啊 那写法就是指定具体调那个 可以去了解下接口
这个大概明白了 可以麻烦看下我四楼的问题吗 那个写法不太明白 谢谢
m11418166 2017-12-13
  • 打赏
  • 举报
回复
引用 3 楼 zy1404 的回复:
你要看看多态相关的知识 HelloChina  和 HelloWorld  都实现了IHelloMessage 接口 IHelloMessage  chinaMsg = new HelloChina (); IHelloMessage  englishMsg = new HelloWorld  (); chinaMsg .sayHello() ---》等价于 调用HelloChina 的 sayHello方法 englishMsg .sayHello() 就是调用HelloWorld  的sayHello的方法。 这就是 多态的体现。 根据注入的子类的不同,使用父类 统一调用,体现了多态,可以实现 不用修改 代码 从而只要给父类 set不同的子类 就能实现不同的功能。
好的我去看下多态吧 就是main中调用的Person中的方法 但是方法有两个实现不知道是哪个 这个时候就是用xml中去配置 是这个意思吧 但是有一点没理解 this.属性.方法 这个为啥这么写啊 我基础不太好 麻烦指点一下 或者说我要去看什么部分
  • 打赏
  • 举报
回复
你要看看多态相关的知识 HelloChina  和 HelloWorld  都实现了IHelloMessage 接口 IHelloMessage  chinaMsg = new HelloChina (); IHelloMessage  englishMsg = new HelloWorld  (); chinaMsg .sayHello() ---》等价于 调用HelloChina 的 sayHello方法 englishMsg .sayHello() 就是调用HelloWorld  的sayHello的方法。 这就是 多态的体现。 根据注入的子类的不同,使用父类 统一调用,体现了多态,可以实现 不用修改 代码 从而只要给父类 set不同的子类 就能实现不同的功能。
vswen5 2017-12-13
  • 打赏
  • 举报
回复
因为你有两个类都实现了同一个接口啊 那写法就是指定具体调那个 可以去了解下接口
  • 打赏
  • 举报
回复
helloMessage2?这个是什么? public String sayHello(){ return this.helloMessage.sayHello(); } 是说的这个吗?因为helloMessage是不确定的,只要是实现了IHelloMessage接口的类都可以。所以根据你设置的helloMessage的对象返回不同的内容。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧