Spring 框架基操

Spring

Spring框架

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

数据访问/集成层包括 JDBC、ORM、OXM、JMS 和 Transactions 模块,具体介绍如下。

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

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

  • OXM 模块:提供了一个支持对象/XML 映射的抽象层实现,如 JAXB、Castor、XMLBeans、JiBX 和 XStream。

  • JMS 模块:指 Java 消息服务,包含的功能为生产和消费的信息。

  • Transactions 事务模块:支持编程和声明式事务管理实现特殊接口类,并为所有的 POJO。

2. Web 模块

Spring 的 Web 层包括 Web、

Servlet、Struts 和 Portlet 组件,具体介绍如下。

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

  • Servlet模块:包括 Spring 模型—视图—控制器(MVC)实现 Web 应用程序。

  • Struts 模块:包含支持类内的 Spring 应用程序,集成了经典的 Struts Web 层。

  • Portlet 模块:提供了在 Portlet 环境中使用 MVC实现,类似 Web-Servlet 模块的功能。

3. Core Container(核心容器)

Spring 的核心容器是其他模块建立的基础,由 Beans 模块、Core 核心模块、Context 上下文模块和 Expression Language 表达式语言模块组成,具体介绍如下。

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

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

  • Context 上下文模块:建立在核心和 Beans 模块的基础之上,它是访问定义和配置任何对象的媒介。ApplicationContext 接口是上下文模块的焦点。

  • Expression Language 模块:是运行时查询和操作对象图的强大的表达式语言。

4. 其他模块

Spring的其他模块还有 AOP、Aspects、Instrumentation 以及 Test 模块,具体介绍如下。

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

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

  • Instrumentation 模块:提供了类工具的支持和类加载器的实现,可以在特定的应用服务器中使用。

  • Test 模块:支持 Spring 组件,使用 JUnit 或 TestNG 框架的测试。

核心功能模块

强大的基于 JavaBeans 的采用控制反转(Inversion of Control,IoC)原则的配置管理,使得应用程序的组建更加简易快捷。一个可用于 Java EE 等运行环境的核心 Bean工厂。数据库事务的一般化抽象层,允许声明式(Declarative)事务管理器,简化事务的划分使之与底层无关。内建的针对 JTA 和单个 JDBC 数据源的一般化策略,使Spring的事务支持不要求 Java EE 环境,这与一般的 JTA 或者 EJB CMT 相反。

JDBC 抽象层提供了有针对性的异常等级(不再从 SQL 异常中提取原始代码),简化了错误处理,大大减少了程序员的编码量。再次利用 JDBC 时,你无需再写出另一个'终止'(finally)模块。并且面向 JDBC 的异常与 Spring 通用数据访问对象(Data Access Object)异常等级相一致。

以资源容器,DAO 实现和事务策略等形式与 Hibernate,JDO 和 MyBatis 、SQL Maps 集成。利用控制反转机制全面解决了许多典型的 Hibernate 集成问题。所有这些全部遵从 Spring 通用事务处理和通用数据访问对象异常等级规范。

灵活的基于核心 Spring 功能的 MVC 网页应用程序框架。开发者通过策略接口将拥有对该框架的高度控制,因而该框架将适应于多种呈现(View)技术,例如 JSP、FreeMarker、Velocity、Thymeleaf 等。值得注意的是,Spring 中间层可以轻易地结合于任何基于 MVC 框架的网页层,例如 Struts、WebWork 或 Tapestry。提供诸如事务管理等服务的AOP框架。在设计应用程序 Model 时,MVC模式(例如 Struts)通常难于给出一个简洁明了的框架结构。Spring 却具有能够让这部分工作变得简单的能力。程序开发员们可以使用Spring的JDBC抽象层重新设计那些复杂的框架结构。

Spring框架核心

核心就是管理资源组件及其依赖关系。包括IoC(Inversion of Control 控制反转)/ DI (Dependency Injection依赖注入),Aop(Aspect Oriented Programming面向切面编程)

IOC

IoC(Inversion of Control 控制反转):资源(组件)不再由使用资源双方进行管理,而是由不使用资源的第三方统一管理,这样带来的好处。第一,资源的集中管理,实现资源的可配置和易管理。第二,降低了使用资源双方的依赖程度,也就是我们说的耦合度

AOP

Aop(Aspect Oriented Programming面向切面编程):我们知道OOP(面向对象编程)针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分,如果在应用开发过程中,如果产生横切性问题,比如日志记录,权限验证,监控性能等,这个时候AOP就上场了,AOP是通过预编译方式或者运行期动态代理实现的一种方式,AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

Spring框架优点

方便解耦,简化开发 (高内聚低耦合)

Spring就是一个大工厂(容器),可以将所有对象创建和依赖关系维护,交给Spring管理spring工厂是用于生成bean

AOP编程的支持

Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能

声明式事务的支持在需要使用事务时只需要通过配置就可以完成对事务的管理,而无需手动编程

方便程序的测试

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

方便集成各种优秀框架

Spring中不重复造轮子,但是Spring会把市面上优秀的框架进行无缝集成

Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis等)的直接支持

降低JavaEE API的使用难度

Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低

Spring中提供很多模板和实现 对MyBatis的支持和其他的数据持久层框架 同时Spring还有自己编写的数据库的操作JDBCtemplate

jdbc需要 有连接 通过读取配置文件内容(与数据库连接的基本信息即可)

使用Spring

<!-- 
    
        在Spring中被Spring管理的都是组件(bean)
     -->
     <bean id="goodsDao" class="com.oracle.dao.GoodsDao"></bean>
     <!-- 指定一个实例注入给goodsDao属性 -->
     <bean id="goodsService" class="com.oracle.service.GoodsService">
     <!-- 为GoodsService中的goodsDao属性注入一个goodsDao实例 -->
        <property name="goodsDao" ref="goodsDao"></property>
     </bean>
public static void main(String[] strParams) {
        //dao service 都是交给Spring所管理 所以 不能使用传统new 方式创建对象
        //GoodsService对象的实例要Spring的beanFactory 中获取
        //IOC
        ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
        GoodsService gs= (GoodsService) context.getBean("goodsService");
        gs.save();
    }

###

Sping中创建实例的方式

通过无参构造方法

public GoodsDao() {
        System.out.println("GoodsDao实例化-----无参构造方法");
    }

静态工厂方式创建实例

public class FactoryBean {
    
    public static GoodsDao createDao() {
        System.out.println("通过静态工厂方法返回一个dao实例");
        //手动new一个goodsDao的对象 创建一个实例
        return new GoodsDao();
    }
}
<bean class="com.tong.factory.FactoryBean" id="goodsDao" factory-method="createDao"/>

实例工厂方法创建实例

<bean class="com.tong.factory.FactoryBean" id="factorBean"/>
<bean id="goodsDao" factory-bean="factoryBean" 
      factory-method="createDao"/>

Sping中注入的三种方式

通过构造方法注入

必须有带参构造方法,如果构造方法中的参数不一致则报错

<bean id="user" class="com.tong.pojo.User">
        <!-- 构造方法进行注入 -->
        <property-arg name="id" value="1"></property-arg >
    
        <property-arg  name="name" value="zhangsan">                 </property-arg >
    </bean>

 

通过Set方法注入

通过xml配置文件进行对属性的注入时,被注入的属性必须在类中有set方法

<bean id="user" class="com.tong.pojo.User">
        <property name="id" value="2"></property>
        <property name="name" value="zhaosi"></property>
    </bean> 

 

通过接口方式注入

	@Override
	public void getConnection(){
        System.out.println("mysql数据库获取链接");
    }
	@Override
	public void commit(){
        System.out.println("mysql数据库事务提交");
    }
	@Override
	public void getConnection(){
        System.out.println("oracle数据库获取链接");
    }
	@Override
	public void commit(){
        System.out.println("oracle数据库事务提交");
    }

 

注解方式(自动装配)

通过注解的方式进行组件注册

 

通过Spring的自动注入

 

什么是依赖注入

在依赖注入中,您不必创建对象,但必须描述如何创建他们。您不是直接在代码中将组件和服务连接在一起,而是描述配置文件中哪些组件需要哪些服务。由Ioc容器将他们装配在一起。

Spring Bean

Bean配置和属性

属性名称描述
id是一个 Bean 的唯一标识符,Spring 容器对 Bean 的配置和管理都通过该属性完成
nameSpring 容器同样可以通过此属性对容器中的 Bean 进行配置和管理,name 属性中可以为 Bean 指定多个名称,每个名称之间用逗号或分号隔开
class该属性指定了 Bean 的具体实现类,它必须是一个完整的类名,使用类的全限定名
scope用于设定 Bean 实例的作用域,其属性值有 singleton(单例)、prototype(原型)、request、session 和 global Session。其默认值是 singleton
constructor-arg<bean>元素的子元素,可以使用此元素传入构造参数进行实例化。该元素的 index 属性指定构造参数的序号(从 0 开始),type 属性指定构造参数的类型
property<bean>元素的子元素,用于调用 Bean 实例中的 Set 方法完成属性赋值,从而完成依赖注入。该元素的 name 属性指定 Bean 实例中的相应属性名
ref<property> 和 <constructor-arg> 等元素的子元索,该元素中的 bean 属性用于指定对 Bean 工厂中某个 Bean 实例的引用
value<property> 和 <constractor-arg> 等元素的子元素,用于直接指定一个常量值
list用于封装 List 或数组类型的依赖注入
set用于封装 Set 类型属性的依赖注入
map用于封装 Map 类型属性的依赖注入
entry<map> 元素的子元素,用于设置一个键值对。其 key 属性指定字符串类型的键值,ref 或 value 子元素指定其值

 

Spring中Bean的作用域

Spring 容器在初始化一个 Bean 的实例时,同时会指定该实例的作用域。Spring 为 Bean 定义了五种作用域

singleton(单例)

单例模式,使用 singleton 定义的 Bean 在 Spring 容器中只有一个实例,这也是 Bean 默认的作用域

prototype(多列)

原型模式,每次通过 Spring 容器获取 prototype 定义的 Bean 时,容器都将创建一个新的 Bean 实例

request

在一次 HTTP 请求中,容器会返回该 Bean 的同一个实例。而对不同的 HTTP 请求,会返回不同的实例,该作用域仅在当前 HTTP Request 内有效

session

在一次 HTTP Session 中,容器会返回该 Bean 的同一个实例。而对不同的 HTTP 请求,会返回不同的实例,该作用域仅在当前 HTTP Session 内有效

global(全球) session

在一个全局的 HTTP Session 中,容器会返回该 Bean 的同一个实例。该作用域仅在使用 portlet context 时有效

Spring Bean 容器的生命周期

Spring bean 容器的生命周期流程如下:

1.Spring 容器根据配置中的 bean 定义中进行实例化 bean。

2.Spring 使用依赖注入填充所有属性,如 bean 中所定义的配置。

3.如果bean

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值