Spring框架之IOC(控制反转)—–(Inversion of Control)
什么是IOC?
- 用来完成—- 原来由程序员主动通过new来实例化对象的这个事情,转交给Spring来负责创建对象。
- 控制反转中—-控制是控制类的对象。反转是指将对象交给Spring类进行管理
IOC作用
解耦—-解耦是指:程序员不需要去管理对象,即不需要自己取创建对象了。
- 举例:比如mybatis中每次使用mapper时需要创建SqlSesssion对象。这个过程转交给Spring来完成,可以提高开发效率。
环境搭建:
- 首先需要四个核心包:core、bean、context、expression
- 另外需要一个commons-logging包
xml文件配置
- xml文件的配置使用的是schema约束。
- 这种约束方式相比dtd文件,是对标签进行约束更加灵活
- 标签的约束通过引入文件的不同会产生不同的限制效果,可扩展性强。
- 官方命名为applicationContext.xml 可以自己命名其他名字。
- 通过引入xsd文件(schema文件)来进行约束。每次引入一个xsd文件时就是引入了一个namespace(命名空间)
通过Spring来创建对象。
一般new对象的方式
//javabean public class People { private String name; private int age; ..get、set方法 } //测试方法 public static void main(String[] args) { //People peo = new People(); ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");//加载配置文件,创建applicationContext的实现类 People peo = applicationContext.getBean("peo", People.class); System.out.println(peo); }
xml文件配置对象
<bean id="peo" class="com.song.po.People"/> <!-- 配置对象的id和全类名 通过id获取对象 --!>
- 默认情况下,创建对象使用的是对象的无参构造。对象创建是在加载配置文件时创建的。
//javabean的无参构造 public People() { System.out.println("走无参构造"); } //注释掉取下面取对象的代码 public static void main(String[] args) { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); // People peo = applicationContext.getBean("peo", People.class); // System.out.println(peo); } //结果:走无参构造 说明在加载xml文件时就已经创建了bean对象,并放入了applicationContext容器中了 // String[] beanName = applicationContext.getBeanDefinitionNames(); 该方法获取容器中所有加载对象的id名