Spring入门

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/

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zjucor/article/details/52347421
文章标签: spring
个人分类: J2EE框架
想对作者说点什么? 我来说一句

spring入门实例,很难额

2011年08月18日 23KB 下载

Spring Guide.pdf Spring 入门书籍.pdf

2008年08月26日 2.61MB 下载

spring入门资料参考一下

2010年03月15日 2.61MB 下载

Spring 经典入门

2008年12月11日 89KB 下载

spring入门纲要

2011年06月10日 338KB 下载

Spring入门经典》源代码

2016年11月07日 1.16MB 下载

Spring入门经典

2016年12月02日 75.11MB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭