applicationContext接口负责加载配置文件,并且以加载就会把里面的Bean加载出来
bean实例化默认是调用了无参的构造方法,利用<反射>的原理获得对象的实例化
1
2
|
<!-- 无参数的构造方法: -->
<
bean
id
=
"studentService"
class
=
"com.mickeymouse.ioc.StudentServiceImpl"
></
bean
>
|
静态工厂实例化bean是实例化工厂以后,利用类名 点 方法(factory-method)名的方法实例化对象----实例化对象,由于静态直接调用工厂中的方法
提供静态工厂:
1
2
3
4
5
6
7
8
|
/**
* 静态工厂方式
* 方法是静态的 提供生产实现类
* @return
*/
public
static
StudentService getStudentService(){
return
new
StudentServiceImpl();
}
|
静态工厂配置
1
2
|
<!-- 静态工厂实例化Bean -->
<bean id=
"studentService"
class
=
"com.mickeymouse.ioc.StaicFactory"
factory-method=
"getStudentService"
></bean>
|
测试类:>通过加载配置文件,获得静态工厂的实例化,调用了静态工厂的静态方法,然后返回一个实例化的对象
1
2
3
4
5
6
7
8
9
10
11
12
13
|
/**
* 静态工厂实现类
*/
@Test
public
void
test2(){
//获取配置文件
String path =
"applicationContext.xml"
;
//加载配置文件
ApplicationContext applicationContext =
new
ClassPathXmlApplicationContext(path);
//生成实例化对象
StudentService studentService = (StudentService) applicationContext.getBean(
"studentService"
);
studentService.addStudent();
}
|
实例工厂实例化是先实例化这个工厂(工厂方法都不是静态的),然后在实例化-----实例化工厂bean
提供实例工厂 (也就是没有静态方法) :
1
2
3
4
5
6
7
8
9
10
|
public
class
StaicFactory {
/**
* 实例工厂方式
* 方法是非静态的 提供生产实现类
* @return
*/
public
StudentService getStudentService(){
return
new
StudentServiceImpl();
}
}
|
配置XML文件:
1
2
3
|
<!-- 实例工厂实例化Bean -->
<
bean
id
=
"staicFactory"
class
=
"com.mickeymouse.ioc.StaicFactory"
></
bean
>
<
bean
id
=
"studentService"
factory-bean
=
"staicFactory"
factory-method
=
"getStudentService"
></
bean
>
|
测试类:---这也是利用反射,先实例化对象,再调取对象中的方法
1
2
3
4
5
6
7
8
9
10
11
12
13
|
/**
* 实例工厂实现类
*/
@Test
public
void
test3(){
//获取配置文件
String path =
"applicationContext.xml"
;
//加载配置文件
ApplicationContext applicationContext =
new
ClassPathXmlApplicationContext(path);
StudentService studentService = (StudentService) applicationContext.getBean(
"studentService"
);
studentService.addStudent();
}
|
id和name区别:
bean中ID跟name其实是一样的,但是ID约束是不能出现特殊字符,但 name是可以出现特殊字符的----这name是因为struts1使用name来区分,如果使用struts1框架,实例化对象时必须写name
class : Bean的全路径
factor-bean:实例工厂实例化对象,与factory-method一块使用
factor-method:静态工厂时
Scope:Bean的作用范围
Scope参数:
singleton---单例>(默认是单例的,当你加载配置文件后,getbean()时,两次都获取的是一个对象,可以试试)
prototype---多例>当Action需要时 可以设置成多例的
request---应用在Web项目中,将对象存到request域中
session---应用在Web项目中,将对象存入到session域中.
globalsession---应用在Web项目中,应用Porlet环境.