Spring入门

原创 2016年08月28日 20:00:38

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/

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Spring Boot整合Mybatis入门Demo

  • 2017年10月27日 16:06
  • 47KB
  • 下载

(9) 使用Spring的注解方式实现AOP入门 以及 细节

1:AOP的概念 Aspect(切面):指横切性关注点的抽象即为切面,它与类相似,只是两者的关注点不一样,类是对物体特征的抽象,而切面横切性关注点的抽象. joinpoint(连接点):所谓连...

Spring从入门到精通(珍藏版)

  • 2017年11月04日 13:30
  • 74.27MB
  • 下载

spring快速入门教程

  • 2015年06月16日 14:16
  • 575KB
  • 下载

Spring Boot 官方文档学习(一)入门及使用

官方文档: http://docs.spring.io/spring-boot/docs/1.4.0.RELEASE/reference/htmlsingle/ 个人说明:本文内容都是从为知笔记...

Spring入门

  • 2015年05月22日 13:19
  • 661KB
  • 下载

Spring Data 入门

  • 2014年09月29日 12:54
  • 818KB
  • 下载

Spring 入门案例1

spring快速入门案例? 1、Struts是一个web框架,主要接管的是jsp和action Hibernate是一个orm框架,是做对象关系映射,用于持久层。 Spring是一个容器框架,可...

spring data jpa 入门例子

  • 2015年02月04日 18:20
  • 13.1MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spring入门
举报原因:
原因补充:

(最多只允许输入30个字)