HelloSpring
- IoC:控制反转
- di:依赖(全局变量) 注入(set方法设置)
我们自己类的全局变量 spring来替我们 通过set方法注入进去
装配Bean(基于XML)
常见的常见bean方式:
- 默认构造
<bean id="sbId" class=""/>
- 工厂模式
- 实例工厂(见struts和hibernate整合项目)
- 静态工厂
- 工厂方法是静态的 不需要创建工厂对象
/**
* 工厂方法 大多数 返回值会是一个接口
* 根据不同的需求 产出该接口的不同实现
**/
public class StaticFactory {
public static Foo getFoo(){
return new Foo();
}
}
/**
* 该方法 会先创建BeanFactory对象 再创建Foo对象
* spring 调用方法 不需要关系权限修饰符
* 它是使用反射直接调用
**/
public class Foo {
public void fun(){
System.out.println("fun方法被调用");
}
}
/**
* 如果我们在加载配置文件的时候不给路径
* 默认加载 applicationContext.xml(web工程)
**/
public void fun(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Foo foo = (Foo) context.getBean("fooId");
foo.fun();
Foo foo2 = (Foo) context.getBean("foo2ID");
foo2.fun();
System.out.println(foo == foo2);
/**
* 默认构造方法
* 静态工厂
* 实例工厂
* 注意: get出来的都是同一个对象 不管get多少次
**/
Foo foo3 = (Foo) context.getBean("foo
Foo foo4 = (Foo) context.getBean("foo
System.out.println(foo3==foo4);
}
```
- 实例工厂 与 静态工厂区别
- 需要先创建工厂对象 所提供的工厂方法全部是非静态的
- 例如 Struts + Hibernate 的项目工厂
# Spring中Bean的种类
在Spring中Bean分为两类
- 普通Bean: 我们之前写的都是普通Bean
- FactoryBean: 是一个特殊的Bean 它具有工厂生产的能力 只能生成特定的对象Bean 需要实现FactoryBean接口
```xml
<!--
使用spring 提供的接口 FactoryBean 实例化对象
class: 实现了 FactoryBean 接口的类
-->
<bean id="fooFactoryBeanId" class="com.wlznb.test.factory.TestFactoryBean"/>
<div class="se-preview-section-delimiter"></div>
public class TestFactoryBean implements FactoryBean<Foo>{
// 泛型: 这个FactoryBean 要创建什么就写什么
@Override
public Foo getObject() throws Exception {
return new Foo();
}
@Override
public Class<?> getObjectType() {
return Foo.class;
}
/**
* 可以选择是否是单例对象(不是单例对象 意味着