继续前面的Ioc/DI学习。
Bean的命名:
按照Java变量的命名方式,可以命名一个或者多个名称,但是在一个IOC容器里必须是唯一的。可以创建别名,利用别名同样可以获取到bean。
别名的创建方式:
测试类型获取方式与前面的通过name的名字获取一样,只是现在换成了别名tt。
实例化Bean技术--反射
可以简单的理解为读取XML配制文件,将键值对转换Map,context通过getBean("key")取得具体的实例,而类的实例化则是通过反射机制,实例化的过程就类似于我们常用的new()。
三种实例化bean方式:
1、构造器来实例化Bean,如默认构造器(上面的例子就是)。
2、静态工厂方法实例化;在实现类里添加静态方法创建对象,配制文件做相应的调整。
3、实例工厂方法实例化
在实例化时,对象之前的依赖关系(一起工作的其它对象),则通过构造器的参数、工厂方法的参数 ,或 给由构造函数或者工厂方法创建的 对象设置。
依赖注入(DI)基本的实现方式:
DI主要有两种注入方式,即 Setter 注 入和 和 构造器 注入
1、通过调用无参构造器或无参static工厂方法实例化bean之后,调用该bean的setter方法,即可实现基于setter的DI。
public class HelloImpl implements HelloApi{
private String name = "";
public void setName(String name){
this.name = name;
}
public String helloSpring3(int a){
System. out .println("hello Spring3==="+a +",name="+name);
return "Ok,a="+a;
}
}
配制文件:
<bean name="helloBean" class="cn.javass.Spring3.hello.HelloImpl">
<property name="name"><value>javass Spring3</value></property>
</bean>
2、构造器注入
public class HelloImpl implements HelloApi{
private String name = "";
public HelloImpl(String name){
this.name = name;
}
public String helloSpring3(int a){
System. out .println("hello Spring3==="+a+",name="+name);
return "Ok,a="+a;
}
}
配置文件
<bean name="helloBean" class="cn.javass.Spring3.hello.HelloImpl">
<constructor-arg><value>javass Spring3</value></constructor-arg>
</bean>