大家好!
代码如下:package cal2;public interface PoCalculator {}
package cal2;public class PoCalculatorImpl implements PoCalculator{}
package cal2;public interface MaxCalculator {
public double max(double a,double b);
}
package cal2;public class MaxCalculatorImpl implements MaxCalculator{
public double max(double a,double b){
double result = (a>=b)?a :b;
System.out.println("max:"+result);
return result;
}
}
package cal2;public interface MinCalculator {
public double min(double a, double b);
}package cal2;public class MinCalculatorImpl implements MinCalculator{
public double min(double a,double b){
double result = (a <= b)? a: b;
System.out.println("min:"+result);
return result;
}
}
package cal2;import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.DeclareParents;@Aspect
public class CalculatorIntroduction {
@DeclareParents(value="cal2.PoCalculatorImpl",defaultImpl=MaxCalculatorImpl.class)
public MaxCalculator maxCalculator;
@DeclareParents(value="cal2.PoCalculatorImpl",defaultImpl=MinCalculatorImpl.class)
public MinCalculator minCalculator;
}
package cal2;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class Main2 {
public static void main(String [] args){
ApplicationContext con = new ClassPathXmlApplicationContext("applicationContext.xml");
PoCalculator po = (PoCalculator) con.getBean("poCalculator");
MaxCalculator m1 = (MaxCalculator) po;
m1.max(1, 2);
MinCalculator m2 = (MinCalculator) po;
m2.min(1, 3);
}
}上面的代码是可以正确运行的。原意是打算通过Bean引入行为使得一个类拥有其他多个类的功能。
可是我有点不明白的是:
1)在Main2类中,po/m1/m2都是实体对象,为什么能够实例化接口呢?我在Java的多态里面见过实例化接口,但是这里似乎没有多态性的呀。
2)我将Main2类里面的接口都换为了Impl的实现类了,
比如PoCalculatorImpl po = (PoCalculatorImpl)con.getBean("PoCalculator");
可是却编译失败,提示无法转换,我就很奇怪,原先宣传@DeclareParent的不就是XXXImpl几个实现类么?为什么写成接口就可以,写成Impl就不行?
希望大家帮忙解答一下,谢谢了呀!
我刚刚开始学习Spring几天,有些东西也是认知很有限,请见谅!JavaSpring
代码如下:package cal2;public interface PoCalculator {}
package cal2;public class PoCalculatorImpl implements PoCalculator{}
package cal2;public interface MaxCalculator {
public double max(double a,double b);
}
package cal2;public class MaxCalculatorImpl implements MaxCalculator{
public double max(double a,double b){
double result = (a>=b)?a :b;
System.out.println("max:"+result);
return result;
}
}
package cal2;public interface MinCalculator {
public double min(double a, double b);
}package cal2;public class MinCalculatorImpl implements MinCalculator{
public double min(double a,double b){
double result = (a <= b)? a: b;
System.out.println("min:"+result);
return result;
}
}
package cal2;import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.DeclareParents;@Aspect
public class CalculatorIntroduction {
@DeclareParents(value="cal2.PoCalculatorImpl",defaultImpl=MaxCalculatorImpl.class)
public MaxCalculator maxCalculator;
@DeclareParents(value="cal2.PoCalculatorImpl",defaultImpl=MinCalculatorImpl.class)
public MinCalculator minCalculator;
}
package cal2;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class Main2 {
public static void main(String [] args){
ApplicationContext con = new ClassPathXmlApplicationContext("applicationContext.xml");
PoCalculator po = (PoCalculator) con.getBean("poCalculator");
MaxCalculator m1 = (MaxCalculator) po;
m1.max(1, 2);
MinCalculator m2 = (MinCalculator) po;
m2.min(1, 3);
}
}上面的代码是可以正确运行的。原意是打算通过Bean引入行为使得一个类拥有其他多个类的功能。
可是我有点不明白的是:
1)在Main2类中,po/m1/m2都是实体对象,为什么能够实例化接口呢?我在Java的多态里面见过实例化接口,但是这里似乎没有多态性的呀。
2)我将Main2类里面的接口都换为了Impl的实现类了,
比如PoCalculatorImpl po = (PoCalculatorImpl)con.getBean("PoCalculator");
可是却编译失败,提示无法转换,我就很奇怪,原先宣传@DeclareParent的不就是XXXImpl几个实现类么?为什么写成接口就可以,写成Impl就不行?
希望大家帮忙解答一下,谢谢了呀!
我刚刚开始学习Spring几天,有些东西也是认知很有限,请见谅!JavaSpring
解决方案 »
- hibernate根据条件查询的问题
- NoSuchMethodError: org.apache.commons.collections.IteratorUtils.emptyIterator()
- 歌词与歌曲同步
- OpenCRX中的Pipeline搞不懂
- 配置tomcat自带的连接池后,读oracle的CLOB字段出错,为什么?
- XML Notepad在什么地方下载?
- 欢迎讨论,UP有分:为什么要使用STRUTS???(除了I18N以外。)
- 有关三层结构的问题?
- 如何判断List中的对象的某个属性的值
- 用jxl导出不能打开,第一次保存液不行,要重新下载
- struts和hibernate整合无法得到SessionFactory
- 关于java断言的一个问题:其他类中的断言在public类中无法实现?
2.基于1中的理论。楼主有点说错了,编译可以通过,运行出错了。原因是没有引入spring中的core包或者没有导入cglib包。
我还有一个问题,希望您可以帮忙看看:
我在学Spring的书里有以下的章节,因为有点多,我不知道哪些是比较需要学习的(我快要实习了,时间比较赶,所以只能先学习比较重要且基础的)
Spring简介
高级Spring IoC容器
Spring AOP和AspectJ支持
Spring的脚本 (Groovy,BeanShell,JRuby)
Spring Security
将Spring与其他Web框架集成
Spring Web Flow
Spring @MVC
Spring REST
Spring和Flex
Grails
Spring Roo
Spring测试
Spring Portlet MVC框架
数据访问
Spring中的事物管理
EJB.Spring Remoting和Web服务
企业中的Spring
消息
Spring Integration
spring Batch
分布式的Spring
Spring 和jBPM
OSGi 和Spring希望您可以帮帮忙看看,谢谢了!