初识Spring的基本应用

1.1 Spring概述

Spring是分层的JavaSE/EE full-stack 轻量级开源框架,以IoC(Inverse of Control 控制反转)和AOP(Aspect Oriented Programming 面向切面编程)为内核,使用基本的JavaBean来完成以前只可能由EJB完成的工作,取代了EJB的臃肿、低效的开发模式。

在实际开发中,通常服务器端在采用三层体系架构,分别为表示层(Web)、业务逻辑层(Service)、持久层(Dao), Spring对每一层都提供了技术支持。

         Spring具有简单、可测试和松耦合等特点。Spring不仅可以用于服务器端开发,也可以应用于任何Java应用的开发中。

      Spring框架采用的是分层架构,它一系列的功能要素被分成20个模块。

Core Container(核心容器)***

        BeanFactory:Spring将管理对象称为Bean。

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

        Core:  提供了Spring框架的基本组成部分,包括IoC和DI功能。

        SpEL:Spring3.0后新增的模块,是运行时查询和操作对象图的强大的表达式语言。

Data Access/Integration(数据访问/集成)

        JDBC:  提供了一个JDBC的抽象层,大幅度的减少了在开发过程中对数据库操作的编码。

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

        ORM:对流行的对象关系映射API,包括JPA、JDO和Hibernate提供了集成层支持。

Web

        Servlet:也称Spring-webmvc模块,包含Spring模型一视图控制器(MVC)和REST Web Services实现的Web程序

        Web:提供了基本的Wb开发集成特性,如:多文件上传、使用Servlet.监听器来初始化IoC容器以及Web应用上下文。

其他模块

        AOP:提供了面向切面编程实现,允许定义方法拦截器和切入点,将代码按照功能进行分离,以降低耦合性。

        AspectJ:提供了与AspectJ的集成功能,AspectJ是一个功能强大且成熟的面向切面编程(AOP)框架。

下载地址:http://repo.spring.io/simple/libs-release-local/org/springframework/spring/4.3.6.RELEASE/

 Spring的核心容器还需要依赖commons.logging的JAR包

Apache Commons Logging - Download Apache Commons Logging

1.2 Spring的核心容器

         Spring容器会负责控制程序之间的关系,而不是由程序代码直接控制。Spring为我们提供了两种核心容器,分别为BeanFactory和ApplicationContext。

      BeanFactory beanFactory = new XmlBeanFactory(new FileSystemResource("F: /applicationContext.xml"));

 

BeanFactory和ApplicationContext有什么区别? - 百度文库 (baidu.com)icon-default.png?t=M3K6https://wenku.baidu.com/view/fd398f54f142336c1eb91a37f111f18583d00c68.html

  ApplicationContext是BeanFactory的子接口,是另一种常用的Spring核心容器。它由org.springframework.context.ApplicationContext接口定义不仅包含了BeanFactory的所有功能,还添加了对国际化、资源访问、事件传播等方面的支持

ClassPathXmlApplicationContext会从类路径classPath中寻找指定的XML配置文件

      ApplicationContext applicationContext = new ClassPathXmlApplicationContext(String configLocation);

 

  FileSystemXmlApplicationContext会从指定的文件系统路径(绝对路径)中寻找指定的XML配置文件

     ApplicationContext applicationContext = new FileSystemXmlApplicationContext(String configLocation);

 Web服务器实例化ApplicationContext容器时,通常会使用ContextLoaderListener来实现,此种方式只需要在web.xml中添加如下代码:

       <context-param>
               <param-name>contextConfigLocation</param-name> 
               <param-value>
                          classpath:spring/applicationContext.xml
               </param-value>
       </context-param> 
       <listener>
               <listener-class>
                         org.springframework.web.context.ContextLoaderListener
               </listener-class>
       </listener>

 Spring获取Bean的实例通常采用以下两种方法:getBean

Object getBean(String name);

根据容器中Bean的id或name来获取指定的Bean,获取之后需要进行强制类型转换。

<T> T getBean(Class<T> requiredType); 根据类的类型来获取Bean的实例。由于此方法为泛型方法,因此在获取Bean之后不需要进行强制类型转换。

 

1.3 Spring的入门程序

1.4 依赖注入

         DI的全称是Dependency Injection,中文称之为依赖注入。它与控制反转(IoC)的含义相同,只不过这两个称呼是从两个角度描述的同一个概念。

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

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

依赖注入,在我们创建对象的过程中,把对象依赖的属性注入到我们的类中。

        package com.itheima.ioc;
        public interface UserService {
                 public void say();
        }

        package com.itheima.ioc;
        public class UserServiceImpl implements UserService {
	private UserDao userDao; 
	public void setUserDao(UserDao userDao) {
	         this.userDao = userDao;
	} 
	public void say() { 
	         this.userDao.say();
	         System.out.println("userService say hello World !");
	}
         }

                在配置文件applicationContext.xml中,创建一个id为userService的Bean,该Bean用于实例化UserServiceImpl类的信息,并将userDao的实例注入到userService中。 

        <bean id="userService" class="com.itheima.ioc.UserServiceImpl"> 
                 <property name="userDao" ref="userDao" />
        </bean>

        package com.itheima.ioc;
        import org.springframework.context.ApplicationContext;
        import org.springframework.context.support.ClassPathXmlApplicationContext;
        public class TestDI {
	public static void main(String[] args) { 
	        ApplicationContext applicationContext = 
                        new ClassPathXmlApplicationContext("applicationContext.xml"); 
	        UserService userService = 
                                         (UserService) applicationContext.getBean("userService"); 
	        userService.say();
	}
        }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值