spring是一个轻量级,非入侵的框架。
spring具有控制反转(IOC)和面向切面编程(AOP)的特性。
支持事务的处理,对框架的整合。
一个图讲明白IOC
耦合的对象具有强耦合性,为了降低耦合性,引入了第三方中间件,也就是IOC容器,使对象解耦,那么每个对象就都独立了
Demo-HelloSpring
下面我将用一个小demo来演示spring
首先创建一个maven
实体类(pojo)
package com.kxy.pojo;
public class Hello {
private String str;
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
@Override
public String toString() {
return "Hello{" +
"str='" + str + '\'' +
'}';
}
}
resource下的bens.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="hello" class="com.kxy.pojo.Hello">
<property name="str" value="spring"/>
</bean>
</beans>
测试类:
public class MyTest {
@Test
public void test(){
//实例化容器,context为上下文
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
//从容器里拿到某个id为xx的Bean Bean等价于对象
Hello hello = (Hello) context.getBean("hello");
System.out.println(hello);
}
}
在一个普通的java项目里(没有使用spring)创建一个hello对象的写法:
Hello hello = new Hello()
class的值对应Hello,id的值对应hello,在这里id实质上是对象的引用。
形象的解释为:class id = new class();
但是在代码里我们没有使用new关键字,
因此new(创建对象的)行为是由spring来创建的。
对象的属性是由spring容器来设置的(setStr)对应xml中property标签的引用。
IOC实质上是一个编程思想:
什么是控制:
传统的程序中,对象是由程序本身来控制的(创建),而用了spring框架后,对象由spring来创建,控制交给了spring,而程序中想要拿对象,只需要获取容器中的bean就可以了,无需自己new。
什么是反转?
程序本身不主动创建对象,而变成被动的去接收对象。
所以我们说IOC实质上是一种编程思想,由主动的创建变成被动的接收。