传统的对象创建及维护是由应用对象本身维护及创建。
那么所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责额。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓的反转。
所谓依赖注入是指:[color=red]在运行期[/color],由外部容器动态地将依赖对象注入到组件中。
那么使用Spring有什么好处呢?
1.降低了组件之间的耦合度,实现各层之间的解耦。
2.可以使用容器提供的众多服务。
3.容器提供了单例模式的支持,不需要自己手写实现代码,提高了开发效率。
4.提供AOP,很容易实现如权限拦截,运行监控等功能。
5.提供了众多的辅助类,能够加快应用的开发,如jdbcTemplate,hibernateTemplate等。
6.对主流的应用框架进行了集成,如struts,hibernate等。
实例化Spring容器有2种方式:
1.在类路径下寻找配置文件来实例化容器
ApplicationContext ctx=new ClassPathXmlApplicationContext(new String[]{"spring.xml"});
2.在文件路径下寻找配置文件来实例化容器(不推荐使用)
ApplicationContext ctx=new FileSystemXmlApplcationContext(new String[]{"d:\\spring.xml"});
ps:Spring的配置文件可以指定多个,可以通过String数组传入
三种实例化bean的方法
1.使用类构造器实例化
2.使用静态工厂方法实例化
3.使用工厂方法实例化
<bean id="xxxFactory" class="xxxx"/>
<bean id="xxx" factory-bean="xxxFactory" factory-method=""/>
bean的作用域:
1.singleton
在IOC容器中bean只定义一个对象实例,默认情况下会在容器启动时初始化bean,但我们可以指定bean的lazy-init=true来延迟初始化bean,这时候,只有第一次获取bean才会被初始化。
如果想对所有bean都延迟初始化,可以在跟节点beans设置defaul-lazy-init="true",如果想在方法中打开某些特定的资源,可以配置init-method="init"方法,如果想在bean销毁之前关闭特定的资源destory-method="destory"
2.prototype
每次从bean都获取新的对象,第一次获取bean时才被初始化。
public class PersonService {
private PersonDao personDao=new PersonDaoImpl();
public void save(Person person){
personDao.save(person);
}
}
那么所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责额。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓的反转。
所谓依赖注入是指:[color=red]在运行期[/color],由外部容器动态地将依赖对象注入到组件中。
那么使用Spring有什么好处呢?
1.降低了组件之间的耦合度,实现各层之间的解耦。
2.可以使用容器提供的众多服务。
3.容器提供了单例模式的支持,不需要自己手写实现代码,提高了开发效率。
4.提供AOP,很容易实现如权限拦截,运行监控等功能。
5.提供了众多的辅助类,能够加快应用的开发,如jdbcTemplate,hibernateTemplate等。
6.对主流的应用框架进行了集成,如struts,hibernate等。
实例化Spring容器有2种方式:
1.在类路径下寻找配置文件来实例化容器
ApplicationContext ctx=new ClassPathXmlApplicationContext(new String[]{"spring.xml"});
2.在文件路径下寻找配置文件来实例化容器(不推荐使用)
ApplicationContext ctx=new FileSystemXmlApplcationContext(new String[]{"d:\\spring.xml"});
ps:Spring的配置文件可以指定多个,可以通过String数组传入
三种实例化bean的方法
1.使用类构造器实例化
<bean id="xxx" class="xxx">
2.使用静态工厂方法实例化
<!--factory-method工厂方法名 -->
<bean id="xxx" class="xxx" factory-method="method">
3.使用工厂方法实例化
<bean id="xxxFactory" class="xxxx"/>
<bean id="xxx" factory-bean="xxxFactory" factory-method=""/>
bean的作用域:
1.singleton
在IOC容器中bean只定义一个对象实例,默认情况下会在容器启动时初始化bean,但我们可以指定bean的lazy-init=true来延迟初始化bean,这时候,只有第一次获取bean才会被初始化。
如果想对所有bean都延迟初始化,可以在跟节点beans设置defaul-lazy-init="true",如果想在方法中打开某些特定的资源,可以配置init-method="init"方法,如果想在bean销毁之前关闭特定的资源destory-method="destory"
2.prototype
每次从bean都获取新的对象,第一次获取bean时才被初始化。