Spring框架

Posted 小蘇

tags:

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

一、Spring组成

  1、Spring Core模块

    该模块是Spring的核心容器,它实现了IoC模式和Spring框架的基础功能。在模块中包含的最重要的BeanFactory类是Spring的核心类,负责配置与管理JavaBean。它采用了Factory模式上线了IoC容器,即依赖注入。

  2、Context模块

    该模块继承BeanFactory(或者说Spring核心)类,并且添加了事务处理、国际化、资源加载、透明加载、以及数据校验等功能。它还提供了框架式的Bean的访问和很多企业级的功能,如JNDI访问、支持EJB、远程调用、集成模板框架、E-mail和定时任务调度等。

  3、AOP模块

    Spring集成了所有AOP功能,通过事务管理可以将任意Spring管理的对象AOP化。Spring提供了用标准Java语言编写的AOP框架,其中大部分内容都是根据AOP联盟的API开发。它使应用程序抛开了EJB的复杂性,但拥有传统EJB的功能。

  4、DAO模块

    该模块提供了JDBC的抽象层,简化了数据库厂商的异常错误(不再从SQLException继承大批代码),大幅度减少了代码的编写并且提供了对声明式和编程式事务的支持。

  5、ORM映射模块

    该模块提供了对现有ORM框架的支持,各种流行的ORM框架已经非常成熟,并且拥有大规模的市场(如Hibernate)。Spring没有必要开发新的ORM工具,但是为Hibernate提供了完美的整合功能,并且支持其他ORM工具。

  6、Web模块

    该模块建立在Spring Context基础之上,提供了Servlet监听器的Context和Web应用的上下文,为现有的Web框架如JSF、Tapestry和Struts等提供了集成。

  7、MVC模块

    该模块建立在Spring核心功能之上,使其拥有Spring狂阿基的所有特性,从而能够适应多种多视图、模板技术、国际化和验证服务,实现控制逻辑和业务逻辑的清晰分离

 

  使用BeanFactory管理Bean,加载Bean配置文件的代码如下:

Resource resource1 = new ClassPathResource("applicationContext.xml");
Resource resource2 = new FileSystemResource("applicationContext.xml");
BeanFactory factory = new XmlBeanFactory(resource1);
Test test = (Test) factory.getBean("test");

  应用ApplicationContext:

  ApplicationContext接口有3个实现类,可以实例化其中任何一个来创建Spring的ApplicationContext容器

  ①ClassPathXMLApplicationContext类

ApplicationContext context = new ClassPathXmlApplicationContext(String configLocation);//configLocation:指定Spring配置文件的名称和位置

  ②FileSystemXmlApplicationContext类

ApplicationContext context = new FileSystemXmlApplicationContext(String configLocation);

  ③WebApplicationContext类

   WebApplicationContext是Spring的Web应用容器,在Servlet中使用该类的方法,一是在Servlet的web.xml文件中配置Spring的ContextLoaderListener监听器;二是修改web.xml配置文件,在其中添加一个Servlet,定义使用Spring的org.springframework.web.contxt.ContextLoaderServlet类。

二、Spring IoC

  1、依赖注入的3中实现类型,Spring支持后两种

  ①接口注入

    该类型基于接口将调用的与实现分离,这种依赖注入方式必须实现容器所规定的接口。使程序代码和容器的API绑定在一起,这不是理想的依赖注入方式

  ②Setter注入

    该类型基础JavaBean的setter()方法为属性赋值,在实际开发中得到了最广泛的应用

public class User{
    private String name;
    public String getName(){
        return name;
    }
    pubilc void setName(String name){
        this.name = name;
    }
}

  ③构造器注入

    该类型基于构造方法为属性赋值,容器通过调用类的构造方法将其所需的依赖关系注入其中

public class User{
    private String name;
    public User(String name){
        this.name=name;
    }
}

  2、依赖注入配置

  ①Setter注入

public class User {
    private String name;
    private Integer age;
    private String sex;
    ...   //省略的setter()和getter()方法
}
<bean id="user" class="entities.User" >
        <property name="name" value="无语"/>
        <property name="age" value="25" />
        <property name="sex" value="男" />
</bean>
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
User user = (User) context.getBean("user");
System.out.println("name:"+user.getName()+"age:"+user.getAge()+"sex:"+user.getSex());

   ②、构造器注入

private String name;
    private Integer age;
    private String sex;

    public User(String name, Integer age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
    public void printlnInfo(){
        System.out.println("name:"+name+"age:"+age+"sex:"+sex);
    }
<bean id="user" class="entities.User" >
        <constructor-arg name="name" value="哈哈" />
        <constructor-arg name="age" value="26" />
        <constructor-arg name="sex" value="女" />
</bean>
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
User user = (User) context.getBean("user");
user.printlnInfo();

 

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

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

使用实体框架迁移时 SQL Server 连接抛出异常 - 添加代码片段

Spring boot:thymeleaf 没有正确渲染片段

What's the difference between @Component, @Repository & @Service annotations in Spring?(代码片段

spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象(代码片段