Spring知识点(一)

Spring

什么是Spring

       Spring是一个开源的一站式轻量级开发框架。它以Ioc(控制反转)和AOP(面向切面)为核心,使用基本的javaBean来完成以前只能由EJB完成的工作,取代了EJB的臃肿、低效的开发模式。

       对Spring的说明:Spring是javaEE应用层中的解决方案,在表现层提供了SpringMVC以及Struts框架的整合功能;在业务层可以管理事务,记录日志等;在持久层可以整合MyBatis、Hibernate、JdbcTemplate等技术,所以说,Spring是一个企业级开发很好地一个”一站式”开发框架。Spring贯穿表现层,业务逻辑层和持久层

Spring框架的优点

       Spring具有简单、可测试和松耦合等特点,Spring不仅开发用于服务器端的开发,也可以应用于任何java应用的开发。总结一下Spring的优点:

  1. 非侵入式设计

Spring是一种非侵入式框架,它可以使应用程序代码对框架的依赖最小化

  1. 方便解耦、简化开发

Spring就是一个大工厂,可以将所有对象的创建和依赖关系的维护工作都交给Spring容器管理,大大降低了组件之间的的耦合性。

  1. 支持AOP

Spring提供了对AOP的支持,它允许将一些通用任务,如安全、事务、日志等进行集中式处理,从而提高了程序的复用性

  1. 支持声明式事务处理

只需要通过配置就可以完成对事务的管理,而无须手动编程

  1. 方便程序测试

Spring提供了Junit4的支持,可以通过注解方便的测试Spring程序

  1. 方便集成各种优秀框架

Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架的直接支持。

Spring的体系结构

       Spring框架采用的是分层架构,功能模块有20多个

       1、Core Container(核心容器)

Spring的核心容器是其他模块建立的基础,它由Beans模块,Core模块,Context模块,Context-support模块和SpEL模块组成

Beans模块:提供了BeanFactory,是工厂模式的经典实现。Spring将管理对象称为Bean

Core核心模块:提供了框架的基本组成部分,包括Ioc(控制反转)和DI(依赖注入)功能

Context上下文模块:建立在core和beans模块基础之上,它是访问定义和配置的任何对象的媒介

Context-support模块:提供了对第三方库嵌入Spring应用的集成支持

       2、数据集成/访问

              JDBC模块:提供了一个JDBC的抽象层,减少代码量

              ORM模块:

              Transactions事务模块:支持对实现特殊接口以及所有POJO类的编程和声明式事务的管理

       3、WEB

              Servlet模块:

进入Spring入门程序编写:

       Spring的下载及目录结构

              Spring的第一个版本是在2004年发布,

              Spring4.3.6版本,名称:spring-framework-4.3.6.RELEASE-dist.zip

              里面包含了jar包和源码

              Jar包用于开发  源码用于观看底层源代码

              docs文件夹中包含了Spring的API文档和开发规范

              libs文件夹中包含开发需要的jar包和源码,

schema文件夹中包含开发所需要的schema文件,在该文件中定义了有关配置文件的约束

入门程序:

  1. 导入jar包:

2、引入配置文件

  1. 编写源代码(建包建类)

  1. 编写UserDao接口中的代码:

public interface UserDao {

 

public void say();

 

}

  1. 编写UserDaoImpl实现类中的代码:

public class UserDaoImpl implements UserDao {

 

       @Override

       public void say() {

              // TODO Auto-generated method stub

              System.out.println("Hello Spring...");

       }

 

}

  1. 编写配置文件中的代码;

<!-- 将指定类配置给Spring,让Spring创建其对象的实例 -->

       <bean id="UserDao" class="com.bdqn.cn.dao.UserDaoImpl" />

  1. 编写测试类中的代码:

public class testDemo {

      

       @Test

       public void method(){

             

//            通过实例化对象调用方法

//            UserDao ud = new UserDaoImpl();

//            ud.say();

             

              // 1、初始化Spring容器,加载配置文件

              ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");

             

              // 2、通过容器获取userDao实例

              UserDao ud = (UserDao) app.getBean("UserDao");

             

              // 3、调用该方式进行测试

              ud.say();

       }

      

      

}

ApplicationContext的解析:

       /*

               *   ApplicationContext 表示应用上下文,是Spring中常用的核心容器

               *   是一个接口

               *   通过ClassPathXmlApplicationContext创建

               *   ClassPathXmlApplicationContext会从类路径classPath中寻找指定的XML配置文件,找到并加载完成ApplicationContext

               *   的实例化操作

               */

依赖注入:

依赖注入(Dependency Injection,简称DI)与控制反转(Ioc)的含义相同

 

控制反转:在使用Spring框架之后,对象的实例不再由调用者来创建,而是由Spring容器来创建,Spring容器会负责控制程序之间的关系,而不是由调用者的程序代码直接控制,这样控制权由应用程序转移到了Spring容器,控制权发生了反转,这就是Spring的控制反转

 

从Spring容器的角度来看,Spring容器负责将被依赖对象赋值给调用者的成员变量,这相当于为调用者注入了它依赖的实例,这就是Spring的依赖注入

 

依赖注入的实现方式:

  1. 属性setter方法注入

建包建类:

      

编写userService接口代码:

public interface UserService {

      

       public void say();

      

}

                     编写userServiceImpl实现类代码:

       public class UserServiceImpl implements UserService {

 

       // 这里是声明  没有具体的值  所以需要给它赋值

       private UserDao userDao;

      

       // 给userDao传入参数

       public void setUserDao(UserDao userDao) {

              this.userDao = userDao;

       }

 

       @Override

       public void say(){

              // TODO Auto-generated method stub

              this.userDao.say();

              System.out.println("userService hello userDao...");

       }

 

}

编写测试类代码:

ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");

             

              UserService us = (UserService)app.getBean("userService");

             

              us.say();

                           

       2、构造方法注入

              编写userServiceImpl代码

              public class UserServiceImpl implements UserService {

 

       // 这里是声明  没有具体的值  所以需要给它赋值

       private UserDao userDao;

      

       // 构造函数传参

       public UserServiceImpl(UserDao userDao) {

              super();

              this.userDao = userDao;

                     }

              }

              编写配置文件中的代码:

              <!-- 构造函数注入 -->

       <bean id="userService" class="com.bdqn.cn.service.UserServiceImpl">

             

              <constructor-arg index="0" ref="UserDao" />

      

              </bean>

              编写测试类:

              @Test

       public void method2(){

             

              ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");

             

              UserService us = (UserService)app.getBean("userService");

             

              us.say();

             

              }

发布了40 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/sj_1993/article/details/105249035