为了账号安全,请及时绑定邮箱和手机立即绑定

MogonBook_Spring_SpringFramework

标签:
Java

一、Spring介绍
1.Spring概述:

Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架:

  • 从大小与开销两方面而言Spring都是轻量级的
  • 通过控制反转(IoC)的技术达到松耦合的目的
  • 提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统服进行内聚性的开发
  • 包含并管理应用对象的配置和生命周期,这个意义上是一种容器
  • 将简单的组件配置、组合成为复杂的应用,这个意义上是框架
2.Spring作用:
  • 容器
  • 提供了对多种技术的支持,如(JMS,MQ支持,UnitTest等)
  • AOP(事物,日志等)
  • 提供了众多方便应用的辅助类(JDBC Template等)
  • 对主流应用框架(Hibernate等)提供了良好的支持
3.Spring适用范围:
  • 构建企业应用(SpringMVC+Spring+Hibernate/ibatis)
  • 单独使用Bean容器(Bean管理)
  • 单独使用AOP进行切面处理
4.IoC(控制反转):

控制权的转让,应用本身不负责依赖对象的创建和维护,而是由外部容器负责创建和维护,而具体被反转的是获得依赖对象的过程,控制被反转之后,获得依赖对象的过程由自身管理变为了由IoC容器主动注入,简单的来说,就是不需要我们自己去实例化所需要的对象,而是通过Spring的外部容器来帮我们去创建,需要使用的时候,直接从容器中取出来就好了。

5.DI(依赖注入):

所谓依赖注入,就是由IoC容器在运行期间,动态的将某种依赖关系注入到对象之中,也就是说在创建对象的同时,建立起对象与对象之间的依赖关系。


二、Spring配置文件详解
<!-- 开启组件自动扫描,扫描路径由base-package属性指定 -->
<context:component-scan base-package="com.mogon.test" />
<!-- 开启注解声明定时任务 -->
<task:annotation-driven />
<!-- 基于@AspectJ切面的注解处理器 -->
<aop:aspectj-autoproxy />
<!-- 使用class属性指定类的默认构造方法创建一个实例Bean,名称由id属性指定 -->
<bean id="Bean实例名称" class="Bean类全名" />
<!-- scope属性为prototype时表示每次将生成新的实例,即原型模式 -->
<bean id="Bean实例名称" class="Bean类全名" scope="prototype" />
<!-- init-method属性用于指定对象实例化后要调用的初始化方法 -->
<!-- destroy-method属性用于指定对象在销毁时要调用的方法 -->
<bean id="Bean实例名称" class="Bean类全名" init-method="方法名" destroy-method="方法名" />
<!-- property标签用于对Bean实例中的属性进行赋值 -->
<bean id="Bean实例名称" class="Bean类全名">
    <!-- 对于基本数据类型的值可由value属性直接指定 -->
    <property name="Bean类中的属性名称" value="直接指定属性值" />
    <!-- 而ref则表示对其他Bean实例的引用 -->
    <property name="Bean类中的属性名称" ref="要引用的Bean名称" />
    <property name="Bean类中的属性名称">
        <!-- 创建一个内部匿名Bean实例赋值给指定的属性,该匿名Bean实例无法被外界访问 -->
        <bean class="Bean类全名" />
    </property>
    <property name="Bean类中的Set类型属性名称">
        <!-- set标签用于创建一个Set类型的实例赋值给指定的Set类型属性,Set实例中的元素通过value或ref子标签指定。 -->
        <set>
            <!-- 对于基本数据类型的元素可由value标签生成 -->
            <value>set中的元素</value>
            <!-- 如果需要引用其他Bean实例作为Set元素的话,可由ref标签指定 -->
            <ref bean="要引用的Bean的名称" />
        </set>
    </property>
    <property name="Bean类中的List类型属性名称">
        <!-- List标签用于创建一个List类型的实例赋值给指定的List类型属性,List实例中的元素通过value或ref子标签指定。 -->
        <list>
            <!-- 对于基本数据类型的元素可由value标签生成 -->
            <value>List中的元素</value>
            <!-- 如果需要引用其他Bean实例作为List元素的话,可由ref标签指定 -->
            <ref bean="要引用的Bean的名称" />
        </list>
    </property>
    <property name="Bean类中的Map类型属性名称"> <!-- Map标签用于创建一个Map类型的实例赋值给指定的Map类型属性,Map实例中的元素通过entry子标签指定。 -->
        <map> <!-- Map元素的键由entry标签的key属性直接指定,值则可由value或ref子标签指定 -->
            <entry key="map元素的key"> <!-- 对于基本数据类型的元素可由value标签生成 -->
                <value>map元素的value</value>
            </entry>
            <entry key="map元素的key"> <!-- 如果需要引用其他Bean实例的话,可由ref标签指定 -->
                <ref bean="要引用的Bean名称" />
            </entry>
        </map>
    </property>
    <property name="Bean类中的Properties类型属性名称">
        <!-- 创建一个Properties类型的实例赋值给指定的Properties类型属性 -->
        <props>
            <!-- Properties实例中的属性元素由prop标签生成,属性项元素的键由key属性指定,属性项元素的值可直接放置在prop标签体中 -->
            <prop key="properties元素的key">properties元素的value</prop>
        </props>
    </property>
    <property name="Bean类中要初始化为null的属性名称">
        <!-- null标签用于给需要赋null值的属性进行赋null值 -->
        <null />
    </property>
</bean>
<!-- 通过传入相应的构造参数进行Bean实例化 -->
<bean id="Bean实例名称" class="Bean类全名">
    <!-- constructor-arg标签用于指定一个构造参数,其index属性标明当前是第几个构造参数(从0开始),type属性声明构造参数的类型,构造参数的值如果是基本数据类型可由value属性直接指定,如果是对象的引用,则由ref属性指定 -->
    <constructor-arg index="从0开始的序号" type="构造参数的类型" value="构造参数的值" />
    <constructor-arg index="从0开始的序号" type="构造参数的类型" ref="要引用的Bean名称" />
</bean>
<bean id="目标对象名称" class="目标对象类全名" />
<bean id="切面实例名称" class="切面类全名" />
<aop:config>
    <aop:aspect id="切面ID" ref="要引用的切面实例名称">
        <aop:pointcut id="切入点名称" expression="切入点正则表达式" />
        <aop:before pointcut-ref="切入点名称" method="切面类中用作前置通知的方法名" />
        <aop:after-returning pointcut-ref="切入点名称" method="切面类中用作后置通知的方法名" />
        <aop:after-throwing pointcut-ref="切入点名称" method="切面类中用作异常通知的方法名" />
        <aop:after pointcut-ref="切入点名称" method="切面类中用作最终通知的方法名" />
        <aop:around pointcut-ref="切入点名称" method="切面类中用作环绕通知的方法名" />
    </aop:aspect>
</aop:config>
<!-- 配置事务管理器 -->
<bean id="事务管理器实例名称" class="事务管理器类全名">
    <property name="数据源属性名称" ref="要引用的数据源实例名称" />
</bean>
<!-- 配置一个事务通知 -->
<tx:advice id="事务通知名称" transaction-manager="事务管理器实例名称">
    <tx:attributes>
        <!-- 方法以get开头的,不使用事务 -->
        <tx:method name="get" read-only="true" propagation="NOT_SUPPORTED" /> <!-- 其他方法以默认事务进行 -->
        <tx:method name="*" />
    </tx:attributes>
</tx:advice>
<!-- 使用AOP技术实现事务管理 -->
<aop:config>
    <aop:pointcut id="事务切入点名称" expression="事务切入点正则表达式" />
    <aop:advisor advice-ref="事务通知名称" pointcut-ref="事务切入点名称" />
</aop:config>
</beans>

三、如何配置Spring配置文件中的命名空间

假如要使用context标签,就要引入context的xsd约束文件到命名空间中,那应该从哪里查找呐,如下图所示:

图片描述

图片描述

图片描述

从spring官网下载相应的spring的jar文件后,里面有一个schema文件夹,spring不同于struts2等框架,他并不是基于dtd文件来约束xml的编写的,而是通过schema来进行xml编写约束的,而我们需要找的内容就在schema文件夹下,如图我们打开最新版本的spring-context-4.3.xsd,如下图所示:

图片描述

我们找到标黄的那一行,将其复制,然后进行修改,修改为:

xmlns:context="http://www.springframework.org/schema/context"

然后将其粘贴到spring配置文件的命名空间中,放在

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

的后面

如下图所示:

图片描述

然后修改xsi:schemaLocation的值,在后面添加

http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd

两段网址中间用用空格隔开就好,这样我们就讲context引入到spring的命名空间中了。(注:个人理解这写网址的作用是在联网时,MyEclipse在编写时候可以通过alt+/来进行代码提示,如果断网的话,代码提示就失效了,这点只是个人理解,如有其它定义,还望指出)


点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
49
获赞与收藏
326

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消