在介绍Spring中IOC之前,先说说Spring的优势有哪些。首先1.方便解耦,简化开发:就是说将对象间的依赖关系交给Spring进行控制,避免了编码造成的过度耦合。2.AOP编程的支持:方便进行切面编程。3.声明式事务的支持:进行事务的管理,提高开发效率和质量。4.方便程序的测试:可以用非容器的依赖的编程方式进行几乎所有的测试工作。5.方便集成各种优秀的框架:Spring降低各种框架的难度,提供各种框架的支持。6.降低API的难度:Spring对(JDBC,javaMail,远程调用等)进行了薄薄的封装层,使这些API使用难度大大降低。

以上讲述了Spring的好处,接下来说说Spring的核心技术IOC。官方是这样介绍IOC的:控制反转,表示将对象的创建权利反转给Spring框架。它主要解决的是“程序耦合性高的问题”。以前创建对象,直接new,利用反射,调用对象克隆,运用序列化手段调用java.io.ObjectInputStream 对象的 readObject()方法。IOC已经帮我们解决了这个问题,创建对象的动作直接交给Spring,它相当于一个大容器,将已经创建好的对象放到容器中,需要那个对象,直接到容器中去取就可以了。

Spring提供了2个工厂接口:1.ApplicationContext接口 :该接口可以获得具体的Bean对象,而且这个接口有2个具体的实现类分别是ClassPathXmlApplicationContext:加载类路径下的Spring配置文件   FileSystemXmlApplicationContext:加载本地磁盘下的Spring配置文件。2.BeanFactory:是Spring框架早期的创建Bean对象工厂接口。代码如下:

看如下代码:

    @Test
public void test() { // 创建Spring工厂,IOC容器
ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
        //BeanFactory ac=new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));  //Beanfactory创建对象   
        UserDao userDao =(UserDao) ac.getBean("userDao");

        userDao.save();

    }

对于以上两个接口还是有区别的,BeanFactory采取延迟加载,第一次getBean时才会初始化Bean。而applicationContext.xml中就会创建具体的Bean对象,除此之外具有事件传递,Bean自动装配,各种不同的应用层的Context实现。对于IOC入门学习者,了解一下Spring核心配置文件的标签。id属性:id属性是Bean的唯一标识  class属性是Bean的全路径名  scope属性代表Bean的作用范围,其中single:单例(默认值)  prototype:多例   request:应用在Web应用层,将创建的对象存入到request域中  session:应用在web应用中,将创建的对象存入到session中  globalsession:应用在porlet环境下使用,将创建的对象存入到全局的session中。注意:当设置为多例时,每次getBean时,都会重新实例化。

init-method属性:当Bean被载入到容器的时候调用init-method指定的方法。destroy-method属性:当Bean从容器中删除的时候调用destroy-method属性指定的方法,想查看destroy-method的效果,必须满足scope=singleton有效,Web容器会自动调用,需要手动ClassPathXmlApplicationContext的close方法。

public class UserDaoImpl implements UserDao{

    public void save() {
System.out.println("持久层,用户保护");
} public void firstInit(){
System.out.println("初始化方法启动");
} public void lastdestroy(){
System.out.println("销毁方法启动");
} }

核心配置文件的配置如下:

 <bean id="userDao" class="com.user.dao.impl.UserDaoImpl" init-method="firstInit" destroy-method="lastdestroy"></bean>

测试代码:

    @Test
public void test() { // 创建Spring工厂,IOC容器
ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml"); UserDao userDao =(UserDao) ac.getBean("userDao"); userDao.save(); // 手动关闭close,才能调用destroy-method方法
((ClassPathXmlApplicationContext)ac).close(); }

2.依赖注入DI:在Spring框架负责创建Bean对象时,动态的将依赖对象注入到Bean组件中!可以通过构造(提供构造方法)注入,set注入(提供Set方法)等,除了以上常用注入以外,还有特殊类型的注入。比如数组或list注入,Map注入,properties注入。特殊类型的注入式放在Bean中注入的,这里实体类需要提供属性,并且提供set方法,以下分别列出其注入的代码:

<!-- 构造方法注入 -->
<bean id="car" class="com.domain.Car">
<constructor-arg name="name" value="大奔"></constructor-arg>
<constructor-arg name="price" value="1234.00"></constructor-arg>
</bean> <!-- set方法注入 -->
<bean id="people" class="com.domain.People">
<property name="name" value="李斯特"></property>
<property name="address" value="上海黄浦区"></property>
<property name="car" ref="car"></property>
</bean> <bean id="cd" class="com.domain.CollectionBean">
<!--list注入 -->
<property name="list">
<list>
<value>测试1</value>
<value>测试2</value>
<value>测试3</value>
</list>
</property>
<!-- Map注入 -->
<property name="map">
<map>
<entry key="id" value="1"></entry>
<entry key="name" value="测试"></entry>
</map>
</property>
<!-- properties注入 -->
<property name="properties">
<props>
<prop key="name">测试2</prop>
<prop key="age">22</prop>
</props>
</property>
</bean>

最新文章

  1. 怎么在myeclipse中导入已经写好的项目
  2. robotium重签名使用解决办法
  3. JavaScript的一些知识碎片(1)
  4. phpstorm 实用快捷键 和 注释
  5. 黑马程序员:Java编程_异常
  6. android tween动画效果
  7. eclipse下创建maven工程
  8. vs 2015密钥
  9. aptitude
  10. OpenVPN客户端证书合并到配置文件中
  11. Java虚拟机中的内存分配
  12. PHP 获取ip地址
  13. springboot aop 自定义注解
  14. azkaban用户管理及权限配置
  15. Shell脚本笔记(六)呈现数据
  16. 使用Spring Cloud Feign作为HTTP客户端调用远程HTTP服务
  17. 【NPM】设置代理
  18. py-day1-2 python的循环语句
  19. MYSQL 的静态表和动态表的区别, MYISAM 和 INNODB 的区别
  20. js循环异常

热门文章

  1. JavaWeb中文乱码问题解决思路
  2. 【BZOJ1189】[HNOI2007]紧急疏散evacuate 动态加边网络流
  3. python if x:
  4. [LintCode] 合并排序数组
  5. 并发编程7 管道&amp;事件&amp;信号量&amp;进程池(同步和异步方法)
  6. 巨蟒python全栈开发数据库攻略3:行记录的操作&amp;单表查询3
  7. AutoArchive settings explained
  8. Scala 中我们长见到=&gt; 解析下
  9. pip与apt-get
  10. Spring Data 开发环境搭建(二)