关闭

Spring入门

标签: spring
202人阅读 评论(0) 收藏 举报
分类:

Spring是为解决企业应用程序开发复杂性而创建的一个Java开源框架,应用非常广泛。是SSH三大框架之一,Spring有两个核心的概念:IOC(控制反转),AOP(面向切面编程)。

Spring


1. IOC

IOC的含义是指控制权的转移,即应用程序本身不负责依赖对象的创建和维护,而是由外部容器负责创建和维护,应用程序本身只管使用。因此可看成是一个容器,即IOC容器。举个栗子:
IOC比喻
简单来说,IOC就是创建对象不直接new出来,而是交给spring容器来创建,创建对象的控制权交给了spring的bean容器。

Spring容器管理容器中Bean之间的依赖关系,Spring使用一种被称为“依赖注入”的方式来管理Bean之间的依赖关系。注入指的是在启动Spring容器加载bean配置的时候,完成对变量的赋值行为,
注入方式分为两种:
* 设值注入:通过set方法
* 构造注入:通过构造函数


2. Bean的装配

在IOC容器中的所有内容都被称为Bean,可以通过xml和注解两种方式实现。

2.1 常见配置项

常见的配置项有:
- id
- class
- scope
- constructor arguments
- properties
- autowiring mode
- initialization/destruction method

class为对应类,
scope是bean的作用域,有以下几种
- singleton:单例,指一个Bean容器中只存在一份
- prototype:每次请求(getBean)创建新的实例
- request:每次http请求创建一个实例且在当前request内有效
- session:同上,每次http请求创建,当前session内有效

如:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:context="http://www.springframework.org/schema/context"
     xmlns:aop="http://www.springframework.org/schema/aop"
     xmlns:tx="http://www.springframework.org/schema/tx"
     xsi:schemaLocation="http://www.springframework.org/schema/beans
         http://www.springframework.org/schema/beans/spring-beans.xsd
         http://www.springframework.org/schema/context
         http://www.springframework.org/schema/context/spring-context.xsd
         http://www.springframework.org/schema/aop
         http://www.springframework.org/schema/aop/spring-aop.xsd
         http://www.springframework.org/schema/tx
         http://www.springframework.org/schema/tx/spring-tx.xsd">

    <!-- 引入外部的属性文件 -->
    <context:property-placeholder location="classpath:jdbc.properties"/>

    <!-- 配置c3p0连接池 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driverClass}"></property>
        <property name="jdbcUrl" value="${jdbc.url}"></property>
        <property name="user" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>

    <!-- 配置业务层类 -->
    <bean id="accountService" class="demo1.AccountServiceImpl">
        <property name="accountDao" ref="accountDao"></property>

        <!-- 注入事务管理模板 -->
        <property name="transactionTemplate" ref="transactionTemplate"></property>

    </bean>

    <!-- 配置DAO的类,直接注入连接池,可自动创建jdbc模板 -->
    <bean id="accountDao" class="demo1.AccountDaoImpl">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <!-- 配置事务管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <!-- 配置事务管理模板:spring为了简化事务管理的代码而提供的类 -->
    <bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
        <property name="transactionManager" ref="transactionManager"></property>
    </bean>


</beans>

2.2 Bean的生命周期

  • 初始化:配置初始化方法可以通过两种方式实现:(1)实现InitializingBean接口,(2)配置init-method
  • 使用
  • 销毁:(1)实现DisposableBean接口,(2)配置destroy-method

2.3 Bean的自动装配

Spring能自动装配Bean与Bean之间的依赖关系,即无须使用ref显式指定依赖Bean。Spring自动装配可通过元素的default-autowire属性指定,该属性对配置文件中所有的Bean起作用;也可通过对元素的autowire属性指定,该属性只对该Bean起作用。autowire和default-autowire可以接受如下值:
- no:不使用自动装配。Bean依赖必须通过ref元素定义。这是默认配置,在较大的部署环境中不鼓励改变这个配置,显式配置合作者能够得到更清晰的依赖关系。
- byName:根据setter方法名进行自动装配。Spring容器查找容器中全部Bean,找出其id与setter方法名去掉set前缀,并小写首字母后同名的Bean来完成注入。如果没有找到匹配的Bean实例,则Spring不会进行任何注入。
- byType:根据setter方法的形参类型来自动装配。Spring容器查找容器中的全部Bean,如果正好有一个Bean类型与setter方法的形参类型匹配,就自动注入这个Bean;如果找到多个这样的Bean,就抛出一个异常;如果没有找到这样的Bean,则什么都不会发生,setter方法不会被调用。
- constructor:与byType类似,区别是用于自动匹配构造器的参数。如果容器不能恰好找到一个与构造器参数类型匹配的Bean,则会抛出一个异常。

3. Bean装配的两种方式

上述的例子是xml方式的,另外还可以通过注解来实现Bean的装配,都有与之对应的@注解。如@scope,@autowired,@Resource等,

这里介绍一下@Resource:
@Resource位于javax.annotation包下,是来自JavaEE规范的一个Annotation,Spring直接借鉴了该Annotation,通过使用该Annotation为目标Bean指定协作者Bean。使用@Resource与元素的ref属性有相同的效果。 @Resource不仅可以修饰setter方法,也可以直接修饰实例变量,如果使用@Resource修饰实例变量将会更加简单,此时Spring将会直接使用JavaEE规范的Field注入,此时连setter方法都可以不要。

4. AOP

面向切面编程:通过预编译方式(AspectJ)和运行期间动态代理(JDK动态代理,CGLib动态代理)实现程序功能的统一维护的一种技术aop

几个基本概念:
- 切面(Aspect): 切面用于组织多个Advice,Advice放在切面
- 连接点(Joinpoint): 程序执行过程中明确的点,如方法的调用,或者异常的抛出。在Spring AOP中,连接点总是方法的调用。
- 增强处理(Advice): AOP框架在特定的切入点执行的增强处理。处理有“around”、“before”和“after”等类型。
- 切入点(Pointcut):可以插入增强处理的连接点。简而言之,当某个连接点满足指定要求时,该连接点将被添加增强处理,该连接点也就变成了切入点。

举个栗子:

<!-- 配置AOP的切面 -->
    <aop:config>
        <!-- 配置切入点  -->
        <aop:pointcut expression="execution(* demo3.AccountService+.*(..))" id="pointcut1"/>
        <!-- 配置切面 -->
        <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut1"/>
    </aop:config>

还是很多概念不太懂,看来得买本书看了。。。
这个网址总结的不错:http://codepub.cn/2015/06/21/Basic-knowledge-summary-of-Spring/

0
0
查看评论

spring入门介绍

课程简介: 1.Spring的概况 2.Spring之IOC 3.Spring之AOP 一、Spring的概况 简介:Spring是一个轻量级控制反转(IOC)和面向切面(AOP)的容器框架,他主要解决企业应用开发的复杂性。  好处: 可以有效组织中间层对象。 使用统一...
  • qq_33774822
  • qq_33774822
  • 2016-09-07 19:36
  • 288

spring入门到精通(一)

Spring 概述1:Spring的历史解决需求: ——软件开发人员常常忙于对技术的研发和应用,而忽略了对业务本身复杂性的分析,为了减少软件开发人员花费在技术时间上 的时间,而把精力放在对业务本身的理解 2:Spring的诞生 ——从2003年1月开始,Spring落户于SourceFor...
  • qq_36218704
  • qq_36218704
  • 2017-07-11 22:59
  • 631

spring cloud入门基础

最近项目上在使用spring cloud,在这一系列的博文中我会把spring cloud的基础应用整理、分享出来,有错误的地方欢迎指出,该系列文章将会持续更新。 spring cloud spring cloud之简单介绍 spring cloud之简单注册中心 spring cloud之服务、消...
  • minicto
  • minicto
  • 2016-11-25 18:23
  • 5758

Spring入门第1天--IOC快速入门

Spring框架学习路线 Spring框架的概述 Spring的核心 Spring优点 Spring体系结构 Spring的快速入门 Spring框架加载配置文件 IOC容器装配Bean Spring框架Bean实例化的方式 Bean的生命周期 Bean中属性注入—基于XML方式 Bean的属性注入...
  • lutianfeiml
  • lutianfeiml
  • 2016-06-22 00:44
  • 9803

spring入门实例详解

spring框架在我们的开发中用到的很多,前面几篇博客也理解了一下spring的基本概念,现在准备写一个spring框架的入门实例,以一个登陆认证签到模块为例子; 实例说明: 登陆签到模块其实很简单,首先用户输入网址,然后系统进入欢迎页面,在欢迎页面填写账号和密码的表单,点击提交到服务端,检查用户名...
  • liaodehong
  • liaodehong
  • 2015-09-06 17:14
  • 9965

spring从入门到上手-AOP

Spring课程 1 Spring基本特征 Spring是一个非常活跃的开源框架;它是一个基于Core来构架多层JavaEE系统的框架,它的主要目地是简化企业开发. Spring以一种非侵入式的方式来管理你的代码,Spring提倡”最少侵入”,这也就意味着你可以适当的时候安装或卸载Spring...
  • u010923921
  • u010923921
  • 2015-04-16 11:00
  • 2006

Spring MVC入门第1天--框架说明与快速入门

springmvc框架 springmvc业务流程框架 springmvc框架组件说明 Spring MVC入门程序 配置前端控制器 配置处理器适配器 开发Handler 视图编写 配置Handler 配置处理器映射器 配置视图解析器 部署调试 注解的处理器映射器和适配器 配置注解映射器和适配器 开...
  • lutianfeiml
  • lutianfeiml
  • 2016-06-30 22:16
  • 5074

spring入门经典教程

一、BeanFactory介绍 1.1、Bean: 在Spring技术中是基于组件的最基本的是最常用的单元其实实例保存在Spring的容器当中 Bean通常被定义在配置文件当中,Bean实例化由Spring的Ioc容器进行管理,Bean的实例可以通过 Beanfactory进行访问...
  • lintlx
  • lintlx
  • 2015-04-17 17:26
  • 1855

Spring基础:快速入门spring boot(3):创建Restful的Web服务

本篇文章将在上篇的基础之上,改善HelloWorld的例子, 使用参数绑定取得信息创建一个简单的Restful的web 服务。
  • liumiaocn
  • liumiaocn
  • 2016-12-08 08:24
  • 814

Spring基础:快速入门spring(1):基础概念

作为流行了10年以上的老将,spring依然精神矍铄,影响不减。本文将对spring很基础的概念进行介绍以及为学习spring最核心和基础的知识作环境搭建的准备。
  • liumiaocn
  • liumiaocn
  • 2016-11-25 07:51
  • 2343