Spring基础学习笔记(八)

4种实例化Bean的方式

 

第一种:需要公共无参构造方法,常用

自己写的对象:Dao,Service,Action都使用这种方法

Spring基础学习笔记(八)

 

第二种:FactoryBean(一般都不自己写FactoryBean实例,而是使用spring已经写好的)

添加hibernate需要的jar文件

实例化不能通过默认无参构造方法获取的bean

通过FactoryBean的子类获取SessionFactory 的实例(添加hibernate的jar文件)

如:

Configuration configuration = new Configuration();
configuration.configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();

FactoryBean接口

public interface FactoryBean<T> {
    //获取对象的实例 
	T getObject() throws Exception;
	//获取对象实例的Class类型
	Class<?> getObjectType();
	//是否单例
	boolean isSingleton();
}

 

MySessionFactoryBean

Spring基础学习笔记(八)

 

面试题:BeanFactory和FactoryBean的区别

BeanFactory接口,顶层父工厂,容器,获取bean的实例

FactoryBean 接口,实例化不能通过默认无参构造方法获取的bean,通过实现类的getObject方法来返回实例,如SessionFactory

org.springframework.orm.hibernate3.LocalSessionFactoryBean
集成hibernate3.x
Org.springframework.orm.hibernate4.LocalSessionFactoryBean
集成hibernate4.x

Junit

Spring基础学习笔记(八)

 

第三种:集成静态简单工厂(一般不用,以后学习activiti要用哦)

 

静态简单工厂(静态方法)

Spring基础学习笔记(八)

spring集成静态简单工厂

因为spring本身就是大的工厂

Spring基础学习笔记(八)

 

第四种:集成实例简单工厂(一般不用)

实例简单工厂(实例方法)

Spring基础学习笔记(八)

spring集成实例简单工厂

Spring基础学习笔记(八)

 

控制反转IOC小结

public class UserServiceImpl{

     private IUserDao dao =new UserDaoJdbcImpl();

}

dao对象是在应用内部创建及维护的。

所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转,目的是为了获得更好的扩展性和良好的可维护性。

当我们把依赖对象交给外部容器负责创建,那么UserServiceImpl类可以改成如下:

public class UserServiceImpl {
     private IUserDao dao;
     set方法:依赖注入
}

 

依赖注入DI小结

所谓依赖注入就是指:在运行期(实例好了spring容器ApplicationContext),由外部容器动态地将依赖对象注入到组件中。

三种依赖注入方式

Type1 接口注入(已经out了)

Type2 设值方法注入(setter)

Type3 构造子注入