spring框架简介

来源:互联网 发布:淘宝货到付款怎样开通 编辑:程序博客网 时间:2024/06/06 02:01

Spring是分层的JavaSE/EE full-stack(一站式) 轻量级开源框架。是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。

Spring 框架由来 :
在2002 年 Rod Johnson 推出 Expert One-to-One J2EE Design and Development

在2004 年 推出 Expert One-to-One J2EE Development without EJB

Spring 出现,解决EJB 存在一些问题 , 因为EJB 比较繁重,复杂, Spring 比较轻便

Spring 好处 :
方便解耦,简化开发
AOP
声明式事务管理
方便程序测试, 整合junit (内嵌优秀测试框架)
Spring 几乎可以整合 业界所有优秀框架 (struts2 、hibernate 、 mybatis)
内置大量工具类,简化应用开发 ,例如:JdbcTemplate 、 javamail、 RMI

Spring 核心:
IOC(Inverse of Control) 控制反转
AOP ( Aspect Oriented Programming) 面向切面编程

IOC 和 AOP:
控制反转的基本概念是:不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。容器 (在 Spring 框架中是 IOC 容器) 负责将这些联系在一起。
AOP,是一种编程技术,它允许程序员对横切关注点或横切典型的职责分界线的行为(例如日志和事务管理)进行模块化。

IOC和DI
IoC 反转控制的概念,就是将原本在程序中手动创建HelloService对象的控制权,交由Spring框架管理,简单说,就是创建HelloService对象控制权被反转到了Spring框架
对象创建权被反转到了容器
DI:Dependency Injection 依赖注入,在Spring框架负责创建Bean对象时,动态的将依赖对象注入到Bean组件
容器提供对象时,将依赖的对象一起提供给你
这里写图片描述

spring 入门demo:

spring开发的最少jar包
spring-beans
spring-core
spring-context
spring-expression
Spring开发,必须依赖commons-logging 日志包 (可以独立使用,也可以整合jdk日志或者 log4j 日志 )
整合log4j 复制jar到lib 、在src 建立log4j.properties

这里写图片描述

代码实现:
UserService接口:

package com.my.service;public interface UserService {    // 登陆方法    public void login();    // 设置姓名    public void setUsername(String name);}

UserServiceImpl实现类:

package com.my.service;public class UserServiceImpl implements UserService{    // username 就是 UserServiceImpl 依赖一个对象     private String username;     public UserServiceImpl() {        System.out.println("user service 被构造...");    }    @Override    public void login() {        System.out.println(username + " 用户登陆");    }    public void setUsername(String username) {        this.username = username;    }}

配置文件,放置在src下:
log4j.properties

### direct log messages to stdout ###log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target=System.outlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n### direct messages to file mylog.log ###log4j.appender.file=org.apache.log4j.FileAppenderlog4j.appender.file.File=c:/mylog.loglog4j.appender.file.layout=org.apache.log4j.PatternLayoutlog4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n### set log levels - for more verbose logging change 'info' to 'debug' ###log4j.rootLogger=info, stdout

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:p = "http://www.springframework.org/schema/p"       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">    <!-- 1. 快速入门 -->    <!-- 提供对象创建权 -->    <!-- id 属性 bean唯一标识, class 创建对象完成类名  -->    <bean id="userService" class="com.my.service.UserServiceImpl">        <!-- 在创建对象时,将其依赖属性 ,自动注入  -->        <property name="username" value="testSpring"></property>    </bean></beans>

测试文件:

package com.my.service;import org.junit.Test;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test2 {    //没有spring容器    @Test    public void demo1() {        UserService service = new UserServiceImpl();        // 设置用户姓名(手动设置依赖)        service.setUsername("test");        service.login();    }    //使用Spring 容器管理UserService 实现对象    @Test    public void demo2(){        // 1、 初始化Spring容器对象         //如果Spring配置文件 在src ---- 使用 ClassPathXmlApplicationContext 读取//如果Spring配置文件 在WEB-INF ---- 使用 FileSystemXmlApplicationContext 读取        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");        // 2、 从容器获得需要Bean <bean id="userService" ..>        // applicationContext对象 类似工厂对象         // 在Ioc 控制对象过程,根据属性依赖关系,完成自动注入        UserService service = (UserService) applicationContext.getBean("userService") ;// 从spring容器得到管理Bean对象        // 3、 调用业务        service.login();    }    //使用BeanFactory 获得容器对象    @Test    public void demo3(){        // 1、 初始化容器        BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));        // 2、 获得目标对象        UserService service = (UserService) beanFactory.getBean("userService");        // 3、 调用业务        service.login();    }}

Spring 容器对象
BeanFactory ,就是Bean管理工厂,是Spring顶级容器接口
ApplicationContext 接口只是BeanFactory 接口的子接口(扩展后)

区别: BeanFactory 延迟加载配置文件中声明Bean对象,当getBean时候,才会创建Bean对象, ApplicationContext 会在加载配置文件时,完成对象创建和依赖注入 ;
ApplicationContext 提供国际化处理、 事件传递、 自动装配 … 更多功能
企业开发时,基本上都是使用ApplicationContext 接口

原创粉丝点击