spring 是一个轻量级 Java 框架, 其核心思想就是 DI(Dependency Injection, 即依赖注入) 和 IoC(Inversion of Control, 即控制反转), 因为其开源, 低侵入性, 现在已经席卷了很大一部分市场, 其最大竞争对手乃是 JavaEE 框架 EJB.EJB3.0 以前, 由于其笨重以及使用繁琐, 被人们无奈弃用, 取而代之就是 spring, 但是 spring 也有它的局限性, 就是 spring 对分布式的支持不好, 但是 EJB 在这方面很有优势, 而且当前 EJB3.0 简化了操作, 使用不再繁琐, 竞争力进一步提升. 所以, 当前轻量级的 Javaweb 项目, 很多都是使用的 spring, 我们有必要把它学好! spring 框架初识, 我希望大家和我一起, 再次回顾下 Spring 的基础知识, 积极提出宝贵的意见和建议! 本次学习使用的是 Spring4.1 版本.
Modules
从这幅图中我们可以看出来 Spring 的整体架构, 主要分为六大模块
Core Container
核心部分分为 4 大块, spring-core, spring-beans, spring-context, spring-expression. 其中 core 和 bean 是整个框架的核心, 提供了基础的 DI 和 IoC 功能. Context 建立在 core 和 beans 模块之上, 提供一种类似 JNDI 且以框架的方式来操作对象的方式. Context 模块从 beans 模块继承它的功能同时增加了国际化支持, 如资源绑定等, 同时, Context 模块也支持 JavaEE 功能, 如 EJB,JMX 和基本的远程调用. ApplicationContext 接口是 context 模块的焦点. expression 是一种很强大的 expression language, 支持在运行时查询和操作对象的属性, 我们会在后面的文章中举些例子来说明 spring expression language 的用法.
AOP and instrumentation
Aop 模块提供了面向切面编程的实现, 和 AspectJ 集成.
Messaging
Messaging 是 spring4 新增加的模块, 包含了一部分主要的基于 message 的应用的实现.
Data Access/Integration
Data access 顾名思义, 是 spring 对数据层提供的支持, 是功能比较丰富的模块. 提供了包括 JDBC, 事物, ORM,JMS 等一系列实现.
Web
Web 模块主要提供面向 Web 的一些实现, 例如多文件上传, servlet 监听器以及 spring mvc 方面的支持.
Test
Test 模块主要是针对 spring 的各个模块做各种各样的测试, 包括单元测试, 集成测试等等.
关于各个模块具体的解释及作用我们会在后面的文章中一一提到, 也请有兴趣的读者自行去查阅 spring 官方文档, 获得更详细的说明.
第一个 Spring 小程序
新建一个 User 类, 一个 UserDao 类以及一个测试类:
User.java
- package com.adam.java.spring.po;
- public class User {
- private String name;
- private int age;
- private int score;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public int getScore() {
- return score;
- }
- public void setScore(int score) {
- this.score = score;
- }
- public String toString(){
- return "tostring from user";
- }
- }
UserDao.java
- package com.adam.java.spring.dao;
- import com.adam.java.spring.po.User;
- public class UserDao {
- private User user;
- public void add(){
- System.out.println("add from userdao");
- System.out.println(user.toString());
- }
- public User getUser() {
- return user;
- }
- public void setUser(User user) {
- this.user = user;
- }
- }
DITest.java
- package com.adam.java.spring;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- import com.adam.java.spring.dao.UserDao;
- public class DITest {
- @SuppressWarnings("resource")
- public static void main(String[] args) {
- ApplicationContext atx = new ClassPathXmlApplicationContext("beans.xml");
- UserDao userDao = (UserDao) atx.getBean("userDao");
- userDao.add();
- }
- }
一个配置文件 beans.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="user" class="com.adam.java.spring.po.User"/>
- <bean id="userDao" class="com.adam.java.spring.dao.UserDao">
- <property name="user" ref="user"/>
- </bean>
- </beans>
执行测试类, 得出如下输出:
- add from userdao
- tostring from user
来源: http://www.jianshu.com/p/b7e04c3cb49e