Spring框架
Spring框架是java应用最广泛的框架,它的成功来源于理念,而不是技术本身,它的理念包括IoC(Inversion of Control,控制反转) 和 AOP(AspectOrientedProgramming, 面向切面编程)。 Spring是容器框架,用于配置Bean并维护Bean之间的关系的一种框架,Bean是Java中的任何一种对象。
Spring能够:
- 能够根据配置文件创建及组装对象之间的依赖关系。
- 面向切面编程能够帮我们无耦合的实现日志记录,性能统计,安全控制。
- 能非常简单的帮我们管理数据库事务。
- 提供了与第三方书库访问框架无缝集成。
- Spring能够与第三方wen框架无缝集成,
Spring的框架结构:

- Data Access/Integeration 层包含有JDBC\ORM\OXM\JMS和Transaction模块
- Web层包含了Web\Web-Servlet\WebSocket\Web-Porlet模块
- AOP模块提供了一个符合AOP联盟标准的面向切面编程实现
- Core Container(核心容器) :包含有Beans、Core、Contenxt和SpEL模块。
- Core模块:封装了框架依赖的最底层部分,包括资源访问、类型转换及一些常用工具类
- Beans模块: 提供了框架的基础部分,包括反转控制和依赖注入,其中BeanFactory是容器核心,本质是“工厂设计模式”的实现,所有应用中对象间的关系由框架管理。
- Context模块,以Core和Beans为基础,继承Beans模块功能并添加资源绑定,数据验证、国际化、javaEE支持,容器生命周期,事件传播等;核心接口是ApplicationContext
- EL模块:提供强大的表达式语言支持,支持访问和修改属性值,方法调用,支持访问及修改数组,容器和索引器,命名变量,支持算数和逻辑运算,支持从Spring容器获取Bean,他也支持列表投影、选择和一般的列表聚合等。
- Test模块支持使用Jnint对Spring组件进行测试
IOC和DI简介
IoC: Incerse of Control(控制反转)
控制反转是一种设计思想,就是将原本在程序中手动创建对象的控制权交由Spring框架来管理。也就是说,Spring将我们从盘根错节的依赖关系中解放了。当前对象如果需要依赖另一个对象,只要打一个@Autowired注解,Spring就会自动创建好对象放入到@Autowired标注的变量中。从而实现松耦合。
正控:若要使用某个对象,需要自己去负责对象的创建。
反控:若要使用某个对象,只需要从Spring中获取需要使用的对象,不关心对象的创建过程,也就是把对象的创建过程交给了Spring框架。
DI:Dependency Injection(依赖注入)
DI:Spring创建对象的过程中,讲对象依赖属性(常亮,对象,集合),通过配置设置值给该对象。
###编写一个Spring程序
- 1、创建Spring项目(这里使用idea)

- 2、创建lib目录放进必要的jar包,并将lib设为编译目录

- 在package[pojo]下新建User类:
package pojo;
public class User {
private String username;
private String password;
private int age;
}
//添加getter and setter方法
- 在SpringConfig.xml中通过xml配置的方式装配Bean
<?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 name="user" class="pojo.User">
<property name="username" value="张三"/>
<property name="password" value="123456"/>
<property name="age" value="11"/>
</bean>
</beans>
- 在package[test]下新建testSpring类
package test;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import pojo.User;
public class TestSpring {
@Test
public void test(){
ApplicationContext context = new ClassPathXmlApplicationContext(
new String[]{"spring-config.xml"}
);
User user = (User) context.getBean("user");
System.out.println(user.getUsername());
System.out.println(user.getAge());
System.out.println(user.getPassword());
}
}
- 运行测试代码

- 注
在这里,传统的方式是通过new关键字来主动创建一个对象。
而IOC方式 为由Spring来创建对象。直接从Spring中获取一个对象。IOC控制反转就是将本来自己new出对象改为从Spring中获取对象。从而实现了低耦合。
继续上面的项目
- 在pojo下创建一个LoginService类:
package pojo;
public class LoginService {
// 唯一关联了一个 Source 对象
private User user = null;
/* setter and getter */
public String makeJuice(){
String str = "xxx用户名:"+user.getUsername()+"密码:"+user.getPassword()
+"年龄:"+user.getAge();
return str;
}
}
- 在xml文件中配置LoginService对象:
<?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 name="user" class="pojo.User">
<property name="username" value="张三"/>
<property name="password" value="123456"/>
<property name="age" value="11"/>
</bean>
<bean name="loginService" class="pojo.LoginService">
<property name="user" ref="user" />
</bean>
</beans>
- 在[testSpirng]中添加以下代码
public class TestSpring {
@Test
public void test(){
ApplicationContext context = new ClassPathXmlApplicationContext(
new String[]{"spring-config.xml"}
);
User user = (User) context.getBean("user");
System.out.println(user.getUsername());
System.out.println(user.getAge());
System.out.println(user.getPassword());
LoginService loginService = (LoginService) context.getBean("loginService");
System.out.println(loginService.makeLogin());
}
}
- 运行测试代码

- 注:
在这里,传统的方式需要
new来获取对象再用=运算符将对象引用赋值给变量。
而当这里使用了ioc来管理对象时,使用DI来注入对象,通过xml文件配置注入。