[SPRING]Spring学习笔记之一----Spring的基本应用

175 阅读3分钟

什么是Spring

Spring是分层的JavaSE/EE full-stack 轻量级开源框架,以IoC(Inverse of Control控制反转)和AOP(Aspect Oriented Programming面向切面编程)为内核,使用基本的JavaBean来完成以前只可能由EJB完成的工作,取代了EJB的臃肿、低效的开发模式。 在实际开发中,通常服务器端在采用三层体系架构,分别为表示层(Web)、业务逻辑层(Service)、持久层(Dao), Spring对每一层都提供了技术支持。

Spring的体系结构

Core Container(核心容器):

Beans:提供了BeanFactory,Spring将管理对象称为Bean
Core:提供了Spring框架的基本组成部分,包括IoC和DI功能
Context:建立在Core和Beans模块的基础上,他是访问、定义和配置的任何对象的媒介
SpEL:Spring3.0后新增的模块,是运行时查询和操作对象图的强大的表达式语言

Data Access/Integration(数据访问/继承):

JDBC:提供一个JDBC的抽象层,大幅度的减少了在开发过程中对数据库操作的编码
ORM:对流行的对象关系的映射API,包括JPA、JDO和Hibernate提供了集成层支持
Transactions:支持对实现特殊接口以及所有POJO类的编程和声明式的事务管理

Web:

Servlet:也成为Spring-webmvc模块,包含Spring模型--视图--控制器(MVC)和RESTWeb Services                                                  实现的Web程序
Web:提供了基本的Web开发集成的特性,如:多文件上传、使用servlet监听器来初始化Ioc容器以及Web应用上下文

其他:

AOP:提供了面向切面编程实现,允许定义方法拦截器和切入点,将代码按照功能进行分离,以降低耦合性
Aspects:提供了与AspectJ的集成功能,AspectJ是一个功能强大且成熟的面向切面编程(AOP)框架

如图所示:

接下来通过一个入门程序来展示Spring的基本用法:

  1. 编写接口类和接口实现类
  public interface UserDao(){
      public void say();
  }
  
  public class UserDaoImpl implement UserDao(){
      @Override
      public void say(){
          System.out.println("hello world!");
      }
  }
  1. 在applicationContext.xml中进行如下配置:
    <!-- 将指定类配置给spring,让spring创建对象的实例 -->
    <bean id="userDao" class="com.mq.ioc.UserDaoImpl"></bean>
  1. 最后编写测试类:
    //1、初始化spring容器,加载配置文件
    ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
    //2、通过容器获取UserDao实例
    UserDao userDao=(UserDao)applicationContext.getBean("userDao");
    //3、调用实例方法
    userDao.say();
  1. 控制台打印出结果:
    又是熟悉的hello world!

第二个案例:依赖注入的实现方法

  1. 编写接口类和接口实现类
public interface UserService {
	public void say();
}

public class UserServiceImpl implements UserService {
	// 声明UserDao属性
	private UserDao userDao;
	// 添加UserDao属性的setter方法,用于实现依赖注入
	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}

	@Override
	public void say() {
		// 调用userDao中的say方法
		this.userDao.say();
		System.out.println("userService say hi");
	}
}
  1. 在spring配置文件中进行如下配置
	<!-- 添加一个id为userService的实例 -->
	<bean id="userService" class="com.mq.ioc.UserServiceImpl">
		<!-- 将id为userDao的bean实例注入到userService实例中 -->
		<!-- name是类中属性的名字,ref是所依赖的bean的id -->
		<property name="userDao" ref="userDao"></property>
	</bean>

在UserService中声明UserDao属性并为其添加setting方法,spring容器先自动实例化userService,并将上面已经进行实例化的userDao实例注入到userService实例中。所以在userService的say()方法中可以直接使用userDao实例。

  1. 编写测试类:
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService=(UserService)applicationContext.getBean("userService");
userService.say();

4.运行结果: