浅谈Spring

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈Spring相关的知识,希望对你有一定的参考价值。

一、Spring引言

  Spring是一款轻量级框架,代码入侵量很小,并且还是众多优秀的设计模式的组合(工厂、代理、模板、策略)。

  特点:

  1、方便解耦,简化开发

    通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。有了Spring,用户不必再为单实例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。

  2、AOP编程的支持

    通过Spring提供的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付。

  3、声明式事务的支持

    在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。

  4、方便程序的测试

    可以用非容器依赖的编程方式进行几乎所有的测试工作,在Spring里,测试不再是昂贵的操作,而是随手可做的事情。例如:Spring对Junit4支持,可以通过注解方便的测试Spring程序。

  5、方便集成各种优秀框架

    Spring不排斥各种优秀的开源框架,相反,Spring可以降低各种框架的使用难度,Spring提供了对各种优秀框架(如Struts,Hibernate、Hessian、Quartz)等的直接支持。

二、着手Spring

  1、环境搭建

    a、导入核心jar包跟第三方依赖jar包。

    b、配置文件

      spring的配置文件只有一个:applicationContext.xml,放置的位置随意。

  2、初识

    a、 核心API

      ApplicationContext工厂类。

      (1)ClassPathXmlApplicationContext(非web环境下)

      (2)WebXmlApplicationContext(web环境下)

      通过以上两个接口都可以获得工厂类,该工厂类是一个重量级资源,一个应用只应该创建一个。在运用了spring的项目中,所有用户所写的类,都应该通过ApplicationContext工厂类来生产。

    b、代码示例

      applicationContext.xml配置:

<bean id="first" class="xxxxx.xxxx.First"/>

      java代码:

ApplicationContext ctx = new ClassPathXmlApplicationContext("/xxxx/applicationContext.xml");
First first = (First)ctx.getBean("first");

      解释:

        第一行通过ClassPathXmlApplicationContext读取spring配置文件获取applicationContext工厂类,参数为Spring配置文件的路径。

        第二行则是由applicationContext工厂类来生产在配置文件中配置过的对象(根据id属性获得)。

三、IOC和DI(控制反转和依赖注入)

  控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。 控制反转一般分为两种类型,依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。依赖注入应用比较广泛。

  简单点来说,就是将成员变量赋值的控制权,从代码中转移到xml文件中去。这样做的好处是解耦和,其原理是工厂+反射。

  1、JDK类型成员变量的注入

    a、8中基本类型+String    

<bean id="user" class="xxxxx.User">
    <property name="name">
        <value>tom</value>
    </property>
    <property name="password">
        <value>123456</>
    </property>
    <property name="age">
        <value>20</value>
    </property>
</bean>

 

<propery name="password" value="123123"/>

 

    两种写法都可以。 

   b、数组

<property name="emails">
    <list>
        <value>[email protected]</value>
        <value>[email protected]</value>
        <value>[email protected]</value>
    </list>
</property>

    c、set集合

<set>
    <value>123123</value>
    <value>123123</value>
    <value>123123</value>
 </set>

//set标签内部的标签,取决于存放的数据类型,不一定是value

    d、List集合

<list>
    <value>123123</value>
    <set>
        <value>123123</value>
    <ref local=""/>
</list>

//和set同理,内部的标签取决于存的数据类型

    e、map集合

<map>
    <entry>
        <key><value>tom</value></key>
        <value>123123</value>
    </entry>
</map>

//一个entry节点代表一个键值对。

    f、properties类型,等价于Map<Stirng,String>

<props>
    <prop key="key1" >value1</prop>
    <prop key="key2" >value2</prop>
</props>

 

  2、用户自定义类型

    首先要在spring配置文件中创建所对应的类<bean id="" class="" />。然后再将其注入。

//java类,示例代码
public class UserService{
    private UserDao userDao;
    get、set
}
//spring配置文件

<bean id="userDao" class="xxxx.UserDao"/>

<bean id="userService" class="xxxx.UserService">
    <property name="userDao">
        <ref local="userDao">
    </property>
</bean>

    用户自定义的类型要用<ref local="">标签来注入。

  3、构造注入(不常用)

<bean id="user" class="xxxx.User" >
    <constructor-arg>
        <value>xxxx</value>
    </constructor-arg>
</bean>

 

 四、spring创建复杂对象

  技术分享

  1、利用FactoryBean创建复杂对象

         

以上是关于浅谈Spring的主要内容,如果未能解决你的问题,请参考以下文章

转载--浅谈spring4泛型依赖注入

浅谈Spring Data ElasticSearch

浅谈Spring中事务管理器

浅谈Mybatis

浅谈spring框架的控制反转和依赖注入

1.3浅谈Spring(IOC容器的实现)